PHP 排序算法(四) 快速排序

5 篇文章 0 订阅

快速排序

思路:

  1.  我们首先要找到一个基准,数组的前半部分是比基准小的元素,数组后半部分是比基准大的元素,这里我就拿数组第一个元素作为基准;
  2.  设置队首和队尾两个指针;
  3.  队尾指针先进行活动,一直向队首移动,直到找到比基准值小的元素,然后将这个值赋给队首指针处;
  4.  下面队首指针开始活动,一直向队尾移动,直到找到比基准值大的元素,然后将这值赋给队尾指针处;
  5.  等到队首指针和队尾指针指向同一处时,将基准值赋给当前指针指向的同一位置,此时,基准元素前面的都是比它要小的元素,后面都是比它大的元素;
  6. 接下来,就是采用上述步骤将两边的部分分别进行排序,如此循环下去,直至开始的low>=开始的high,说明就剩下了一个元素,也就无需再排了。
/**
 * @param $arr
 * @param $low
 * @param $high
 * @return mixed
 */
function quickSort(&$arr,$low,$high){
    if($low < $high){
        $index = getIndex($arr,$low,$high);
        quickSort($arr,0,$index-1);
        quickSort($arr,$index+1,$high); 
    }
    return $arr;
}

/**
 * @param $arr
 * @param $low
 * @param $high
 * @return mixed
 */
function getIndex(&$arr,$low,$high){

    $tmp = $arr[$low];

    while($low < $high){
        //如果队尾元素值大于基准元素,那么high--
        while($low < $high && $arr[$high] > $tmp){
            $high--;
        }
        //如果队尾元素小于基准值,那么就将队尾元素赋值给队首元素
        $arr[$low] = $arr[$high];
        //如果队首元素小于基准值,那么low++
        while($low < $high && $arr[$low] < $tmp){
            $low++;
        }
        //如果队首元素大于基准值,就将队首元素赋值给队尾元素
        $arr[$high] = $arr[$low];
    }

    //退出时,high == low
    $arr[$low] = $tmp;
    return $low;
}


$arr = array(4,5,1,6,2,8,3,11,10);
print_r(quickSort($arr,0,count($arr)-1));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值