今天理解了一下快速排序这个算法 题解如下:
(1)从数列中挑出一个元素,称该元素为“基准”。
(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。
(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
$arr = array(50,30,100,70,9,19);
function QuickSort($arr) {
if( count($arr) < 1 ) {
// 主要是判断最后一次递归的时候终止
return $arr;
}
$left = $right = array(); // 变量left是承载比中间值小的数组 right是承载比中间值大的数组 一个在左边一个在右边
$middle = $arr[0]; // 这个变量作为中间值
for($i=1;$i<count($arr);$i++) {
// 这里就循环排序所有的值
if( $middle > $arr[$i] ) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = QuickSort($left); // 递归很关键 关键 关键
$right = QuickSort($right);// 递归很关键 关键 关键
return array_merge($left,$middle,$right); // 用函数合并一下就好啦
}