快速排序是一种分治的排序算法,采用递归的思想,将数组元素分为两部分,选择切分元素,左右扫描数组,将大于切分元素的数据放在右边,小于切分元素的数据放在左边,直到扫描指针相遇,切分结束,同时递归调用,直到数组有序。
代码如下:
1<?php 2function quick_sort(array& $array,$low,$high){ 3 if($low >= $high){ 4 return $array;//递归出口,数组的最高位下标小于数组最低位下标 5 } 6 $i = $low; 7 $j = $high+1; //数组切分循环 8 $v = $array[$low];//切分元素 9 while(true){//循环查找 10 while($array[--$j] >= $v)if($j == $low)break;//从右往左查找第一个比$v小的元素 11 while($array[++$i] <= $v)if($i == $high)break;//从左往右查找第一个比$v大的元素 12 if($i >= $j)break;//指针相遇 13 $tmp = $array[$j]; 14 $array[$j] = $array[$i]; 15 $array[$i] = $tmp; //元素位置交换 16 } 17 $array[$low] = $array[$j]; 18 $array[$j]= $v;//将切分元素放入相应位置 19 20 quick_sort($array,$low,$j-1); 21 quick_sort($array,$j+1,$high); //递归调用 22 23} 24 25$array = array('1','3','2','5','6','5'); 26$high = count($array); 27quick_sort($array,0,$high-1); 28var_dump($array); 29?>
同时也可以用shuffle()函数对数组进行打乱,以便消除对输入的依赖~