快速排序实现

快速排序算法那思想:气泡排序的一种改进,基本思路是每进行一趟遍历,将序列分割成两个独立的有序的部分,其实就是将整个序列看成两个气泡。在对含有n个元素的数组S的一次快速排序过程中,设置low=0,height=n-1,已S[0]为给定值并赋值给t,从height开始向左遍历并且height自减,找到第一个小于t的数据元素S[height],然后S[low]=S[height],再从low开始向右遍历并且low自加,找到第一个大于t的数据元素S[low],然后S[height]=S[low],知道low=height为止时,最后将t赋值给S[low]或S[height]一次快速排序结束。

代码实现:

   /**
     * @name 数组排序
     * @use 使用快速排序算法对数组进行排序,数组类型为每个元素都含有“value”属性用于排序
     * @param $height 指向排序段上边界
     * @param $low 指向排序段下边界
     * @param $arr 待排序数组
     * @return $arr
     */
    public static function quickSort($height, $low, &$arr)
    {
        $randNum = rand($low, $height);
        $temp = $arr[$low];
        $arr[$low] = $arr[$randNum];
        $arr[$randNum] = $temp;
        $lowTemp = $low;
        $heightTemp = $height;
        $initNum = $arr[$low];
        $index = $low;
        $switch = true;//true为从高位向地位找,false为从低位向高位找
        while ($low != $height) {
            if ($switch) {
                if ($arr[$height]['value'] > $initNum['value']) {
                    $arr[$index] = $arr[$height];
                    $index = $height;
                    $switch = false;
                }
                $height--;
            } else {
                if ($arr[$low]['value'] < $initNum['value']) {
                    $arr[$index] = $arr[$low];
                    $index = $low;
                    $switch = true;
                } 
                $low++;
            }
        }
        $arr[$index] = $initNum;
        if ($lowTemp < $index - 1) {
            self::quickSort($index - 1, $lowTemp, $arr);
        }
        if ($heightTemp > $index + 1) {
            self::quickSort($heightTemp, $index + 1, $arr); 
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值