PHP 快速排序

作为一个初级phper,平时用到的算法很少,但是基本的几种算法还是要掌握的,比如快速排序。

需求:分别用快速排序法将下面数组中的值按照从小到的顺序进行排序。 
要排序的数组:$arr(1,34,555,63,21,66,32,78,36,76,25);
思路分析:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

<?php
/* 
 * 快速排序
 * 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
 * date 2017-1-20
 * author 疯狂老司机
 */
$arr=array(1,34,555,63,21,66,32,78,36,76,25);
function quick_sort($arr) 
{
    //先判断是否需要继续进行
    $length = count($arr);
    if($length <= 1) 
    {
        return $arr;
    }
    //如果没有返回,说明数组内的元素个数多余1个,需要排序,选择一个标尺,选择第一个元素
    $base_num = $arr[0];
    //遍历除了标尺外的所有元素,按照大小关系放入两个数组内
    $left_array = array();//小于标尺的
    $right_array = array();//大于标尺的
    for($i=1; $i<$length; $i++) 
    {
        if($base_num > $arr[$i]) 
        {
            //放入左边数组
            $left_array[] = $arr[$i];
        } 
        else 
        {
            //放入右边
            $right_array[] = $arr[$i];
        }
    }
    //再分别对左边和右边的数组进行相同的排序处理方式
    //递归调用这个函数,并记录结果
    $left_array = quick_sort($left_array);
    $right_array = quick_sort($right_array);
    //合并左边标尺右边
    return array_merge($left_array, array($base_num), $right_array);
}

var_dump(quick_sort($arr));

?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值