• 四种常用的排序算法


    1、冒泡排序:

    两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小。
    第一个循环次数为n,第二个循环次数最大为 n-1,每轮选出一个最大或者是最小的值,时间复杂度O(n^2)。

    function maopaoSort ($list)
    {
        $len = count($list);
        for ($i = 0; $i < $len - 1; $i++) {
            for ($j = 0; $j < $len - $i - 1; $j++) {
                if ($list[$j] > $list[$j + 1]) {
                    $tmp = $list[$j];
                    $list[$j] = $list[$j + 1];
                    $list[$j + 1] = $tmp;
                }
            }
        }
        return $list;
    }

    2、选择排序:

    选定一个作为最小值,剩下的和这个比较,然后调换位置。

    第一个循环次数为n,第二个循环次数最大为 n-1,时间复杂度O(n^2)。

    function xuanzeSort ($list)
    {
        $len = count($list);
        for ($i = 0; $i < $len - 1; $i++) {
            $pos = $i;
            for ($j = $i + 1; $j < $len; $j++) {
                if ($list[$pos] > $list[$j]) {
                    $pos = $j;
                }
            }
            if ($pos != $i) {
                $tmp = $list[$pos];
                $list[$pos] = $list[$i];
                $list[$i] = $tmp;
            }
        }
        return $list;
    }

    3、插入排序:

    假设前面的数都是排好顺序的,要把第n个数插入到有序的数组里。

    第一个循环次数为n,第二个循环次数最大为 n-1,时间复杂度O(n^2)。

    function charuSort ($list){
        $len = count($list);
        for ($i = 1; $i < $len; $i++) {
            $tmp = $list[$i];//获取对比元素
            for ($j = $i - 1; $j > 0; $j--) {
                if ($list[$j] > $tmp) {
                    $list[$j + 1] = $list[$j];
                    $list[$j] = $tmp;
                } else {
                    break;
                }
            }
        }
        return $list;
    }
    

    4. 快速排序:

    设置一个基准值,小于基准值放左边,大于基准值放右边,最后递归继续排左右两侧的,最后将排完后数组合并。时间复杂度为O(nlogn)

    public function kuaisuSort($list)
    {
       $len = count($list);
       
       // 设置一个中间的值,比这个值小的放左边,比这个值大的放右边,最后合并
       $middle = $list[0];
       $leftArr = $rightArr = [];
       for ($i = 1; $i < $len; $i++) {
          if ($list[$i] < $middle) {
             $leftArr[] = $list[$i];
          } else {
             $rightArr[] = $list[$i];
          }
       }
       
       // 再继续对左边和右边的数组继续排序
       if ($leftArr) {
          $leftArr =kuaisuSort($leftArr);
       }
       // 再继续对右边的数组排序
       if ($rightArr) {
          $rightArr = kuaisuSort($rightArr);
       }
       
       return array_merge($leftArr, [$middle], $rightArr);
    }

  • 相关阅读:
    mybatis ORDER BY FIND_IN_SET 失效的一次问题排查
    一文详解窄脉冲LIV测试系统的特点和功能
    Rust个人学习之包&模块
    Kafka牛逼在哪里?
    高通Android随身WIFI屏蔽商家远程控制断网
    2022,程序员应该如何找工作
    SLAM算法中状态估计的算法有哪些?
    兽医诊所温湿度失衡,该如何止损?
    2024年GPLT团体程序设计比赛L2-D吉利矩阵题解
    【SLAM】5相机&图像
  • 原文地址:https://blog.csdn.net/weixin_64940494/article/details/126976768