美文网首页
常用的排序算法

常用的排序算法

作者: kimcastle | 来源:发表于2022-02-22 11:32 被阅读0次

    1. 冒泡排序:

    冒泡排序法
    
    <?php
    
    //冒泡排序法
    
    $lists = [20,5,33,14,28,38,1];
    
    //统计数组个数
    
    $len = count($lists);
    
    //这里 $i=0 可以看做第一个位置
    
    for($i = 0; $i < $len; $i++){
    
        for($j = $i+1; $j < $len; $j++){
    
          // $j 从第二个位置开始一直到最后一个位置, 取到对应值与 第一个位置 ($i = 0) 进行比较,这样第一趟后,$i = 0 就是最小值了,
    
          // 也就是所谓的 “冒泡”
    
          //与 $i=0 位置数值进行比较交换
    
          if($lists[$i] > $lists[$j]){
    
              $temp = $lists[$i];
    
              $lists[$i] = $lists[$j];
    
              $lists[$j] = $temp;
    
          }
    
        }   
    
    }
    
    print_r($lists);
    
    ?>
    
    

    2.快速排序法

    快速排序法
    <?php
    
    //快速排序法必须定义一个“递归”函数
    function fastSort($arr){
        //定义“递归”退出机制
        $len = count($arr);
        if($len <= 1) return $arr;
        
        //定义枢轴为每个数组第一个数值
        $middle = $arr[0];
        //初始化作用两边数组
        $left = $right = [];
        //根据枢轴区分左右两边数组内容
        for($i = 1; $i < $len; $i++){
            if($arr[0] > $arr[$i]){
                array_push($left,$arr[$i]);
            }else{
                array_push($right,$arr[$i]);
            }
        }
        
        //左右数组进行“递归”处理
        $left = fastSort($left);
        $right = fastSort($right);
        
        return array_merge(array_merge($left,[$middle]),$right);
        
    }
    
    //快速排序法
    $lists = [20,5,33,14,28,38,1];
    $lists = fastSort($lists);
    
    
    print_r($lists);
    
    ?>
    

    3.插入排序法

    插入排序法
    <?php
    //插入排序法
    $lists = [20,5,33,14,28,38,1];
    
    $len = count($lists);
    
    //采用插入位置(从第二个位置数值开始),与前面数值进行比较交换位置
    //最终开始到插入位置是一个有序的从小到大的排序 (插入位置为最大值)
    for($i = 1; $i < $len; $i++){
        //前面数值与插入位置值进行比较,调换值
        for($j=0; $j < $i; $j++){
            if($lists[$i] < $lists[$j]){
                $temp = $lists[$j];
                $lists[$j] = $lists[$i];
                $lists[$i] = $temp;
            }
        }
    }
    
    print_r($lists);
    
    ?>
    

    4.选择排序法

    选择排序法
    <?php
    //选择排序法
    $lists = [20,5,33,14,28,38,1];
    $len = count($lists);
    //从第一个位置先后面跑
    for($i=0; $i<$len; $i++){
        //第一个位置默认为最小值
        $key = $i;
        //从第二个位置数值开始进行比较
        for($j=$i+1; $j<$len; $j++){
            if($lists[$j] < $lists[$i]){
                //获取第一个位置最小值位置
                $key = $j;
            }
        }
        
        //将第一次最小值位置值与第一个位置数值进行调换
        if($i != $key){
            $temp = $lists[$key];
            $lists[$key] = $lists[$i];
            $lists[$i] = $temp;
        }
    }
    print_r($lists);
    
    ?>
    

    5.归并排序法

    归并排序法
    <?php
    //归并排序
    function mergeSort($arr)
    {
        $n = count($arr);
        //设置好递归函数退出机制
        if($n <= 1){
            return $arr;
        }
        //对数组进行左右递归切割
        $half = ceil($n/2);
        $temp = array_chunk($arr,$half);
        $left = mergeSort($temp[0]);
        $right = mergeSort($temp[1]);
        
        $reg = [];
        while(count($left) && count($right)){
            if($left[0] < $right[0]){
                $reg[] = array_shift($left);
            }else{
                $reg[] = array_shift($right);
            }
        }
        return array_merge($reg,$left,$right);
    }
    
    
    //归并排序法
    $lists = [20,5,33,14,28,38,1,8];
    $lists = mergeSort($lists);
    print_r($lists);
    
    ?>
    

    相关文章

      网友评论

          本文标题:常用的排序算法

          本文链接:https://www.haomeiwen.com/subject/jthglrtx.html