PHP快速排序
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
1 <?php 2 /* 3 * 重点是递归思想的理解 4 *一维数组的排序 5 *@param $array 需要排序的数组 6 */ 7 $array=[34,12,23,565,89,6,25,67,45,767,342,98,2]; 8 function qiuck_sort($array){ 9 //如果数组中元素只有一个,则不需要比较,也是递归终止的条件 10 if(count($array)<=1){ 11 return $array; 12 } 13 /* 14 * 取一个参考元素,后面的元素与它比较 15 * 小的放在左边,大的放在右边,按照 16 * 此方法分割,直到不能分割为止 17 */ 18 $rightArray=$leftArray=array(); 19 $base=$array[0];//参考元素,随便选取数组中的一个元素即可 20 //for循环比较 21 for($i=1;$i<count($array);$i++){ 22 if($array[$i]<$base){ 23 $leftArray[]=$array[$i]; 24 }else{ 25 $rightArray[]=$array[$i]; 26 } 27 } 28 //循环完后,将分割后的数组再次按照相同的方法 29 //进行排序分割,直到不能分割位置 30 $left_tmp=qiuck_sort($leftArray); 31 $right_tmp= qiuck_sort($rightArray); 32 //合并最后的结果并返回 33 $result=array_merge($left_tmp,array($base),$right_tmp); 34 35 return $result; 36 } 37 38 print_r(qiuck_sort($array)); 39 40 41 排序后的数组: 42 Array ( [0] => 2 [1] => 6 [2] => 12 [3] => 23 [4] => 25 [5] => 34 [6] => 45 [7] => 67 [8] => 89 [9] => 98 [10] => 342 [11] => 565 [12] => 767 43 ?>
- 上一篇 »Java实现几种常见排序方法?
- 下一篇 »快速排序的JavaScript实现