排序两种方法

排序:

  • 快速排序

               快速排序是十分常用的高效率的算法,其思想是:先选一个标尺,用它把整个队列过一遍筛选,以保证其左边的元素都  不大于它,其右边的元素都不小与

$arr = [234,3,14,2,45,12,4567,455,343];
public function quickSort($arr){
        // 获取数组长度
        $length = count($arr);

        // 判断长度是否需要继续二分比较
        if($length <= 1){
            return $arr;
        }

        // 定义基准元素
        $base = $arr[0];

        // 定义两个空数组,用于存放和基准元素的比较后的结果
        $left = [];
        $right = [];

        // 遍历数组
        for ($i=1; $i < $length; $i++) {

            // 和基准元素作比较
            if ($arr[$i] > $base) {
                $right[] = $arr[$i];
            }else {
                $left[] = $arr[$i];
            }

        }

        // 然后递归分别处理left和right
        $left = $this->quickSort($left);
        $right = $this->quickSort($right);

        // 合并
        return array_merge($left,[$base],$right);

    }

              返回结果为: [ 2,3,12,14,45,234,343,455,4567]

  • 冒泡排序

      原理:对一组数据,比较相邻数据的大小,将值小数据在前面,值大的数据放在后面。

$arr = [234,3,14,2,45,12,4567,455,343];
public function quickSort($arr){
        // 获取数组长度
        $length = count($arr);

        // 第一层循环控制冒泡轮次
        for ($i=0; $i < $length-1; $i++) {

            // 内层循环控制从第0个键值和后一个键值比较,每次冒出一个最大的数
            for ($k=0; $k < $length-1-$i; $k++) {
                if($arr[$k] > $arr[$k+1]){
                    $tmp = $arr[$k+1];
                    $arr[$k+1] = $arr[$k];
                    $arr[$k] = $tmp;
                }
            }
        }
        return $arr;
    }

 

             返回结果为:[2,3,12,14,45,234,343,455,4567]

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值