PHP快速排序(原地切分)

        快速排序是一种分治的排序算法,采用递归的思想,将数组元素分为两部分,选择切分元素,左右扫描数组,将大于切分元素的数据放在右边,小于切分元素的数据放在左边,直到扫描指针相遇,切分结束,同时递归调用,直到数组有序。

        代码如下:

<?php
function quick_sort(array& $array,$low,$high){
    if($low >= $high){
        return $array;//递归出口,数组的最高位下标小于数组最低位下标
    }
    $i = $low;
    $j = $high+1;    //数组切分循环
    $v = $array[$low];//切分元素
    while(true){//循环查找
        while($array[--$j] >= $v)if($j == $low)break;//从右往左查找第一个比$v小的元素
        while($array[++$i] <= $v)if($i == $high)break;//从左往右查找第一个比$v大的元素
        if($i >= $j)break;//指针相遇
        $tmp = $array[$j];
        $array[$j] = $array[$i];
        $array[$i] = $tmp;    //元素位置交换
    }
    $array[$low] = $array[$j];
    $array[$j]= $v;//将切分元素放入相应位置
    
    quick_sort($array,$low,$j-1);
    quick_sort($array,$j+1,$high); //递归调用

}

$array = array('1','3','2','5','6','5');
$high = count($array);
quick_sort($array,0,$high-1);
var_dump($array);
?>

同时也可以用shuffle()函数对数组进行打乱,以便消除对输入的依赖~

转载于:https://my.oschina.net/aqingyan/blog/758901

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值