PHP 快速排序

来源:互联网 发布:26周胎儿正常发育数据 编辑:程序博客网 时间:2024/05/16 14:31

作为一个初级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));?>


1 0
原创粉丝点击