其实快速排序之所以称之快速,就是因为,冒泡排序是每次对比只交换相邻的两个值的位置,这样每个值要移动到它最终的排序结果中所对应的位置,可能需要很多次位置的变化。但是快速排序可在一次划分中,就确定你选定的那个对比值在最终排序好的队列中的位置。这就是快排的特点。
思路就是这样,那么代码是怎么实现的呢?如下:
<?php header('content-type:text/html;charset=utf8 '); $arr=array(50,2,45,42,6,22,15,11,30,16,13,3); //调用排序方法 echo "<pre>"; print_r(quick_sort($arr));快速排序方法及注释
function quick_sort($arr) { //先判断是否需要继续进行 //初始化两个数组 $left_array = array();//小于标尺的 $right_array = array();//大于标尺的 $length = count($arr); if($length <= 1) { return $arr; } //如果没有返回,说明数组内的元素个数 多余1个,需要排序 //选择一个标尺 //选择第一个元素 $base_num = $arr[0]; //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内 //注意这里的i一定要等于1,也就是从数组的第二个值开始比较,因为第一个值已经是被选定为对比值了 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); }
Array ( [0] => 2 [1] => 3 [2] => 6 [3] => 11 [4] => 13 [5] => 15 [6] => 16 [7] => 22 [8] => 30 [9] => 42 [10] => 45 [11] => 50 )