/**
* 快速排序----代码1
* @param $arr array
* @return $new_arr array
*/
function QuickSort(){
$num = count($arr);
$l = $r = 0;
for($i = 0; $i < $num; $i++){
if( $arr[$i] < $arr[0] ){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
if($l > 1){
$left = QuickSort($left);
}
$new_arr = $left;
$new[] = arr[0];
if($r > 1){
$right = QuickSort($right);
}
for($i = 0; $i < $r; $i++){
$new_arr[] = $right[$i];
}
return $new_arr;
}
/**
* 快速排序----代码2
* @param $arr array
* @return $new_arr array
*/
function QuickSort($arr){
$num = count($arr);
if($num > 1){
$max = $arr[0];
$left = array();
$right = array();
for($i = 1; $i < $num; $i++){
if($max >= $arr[$i]){
$left[] = $arr[$i];
}else if($max < $arr[$i]){
$right[] = $arr[$i];
}
}
$left = QuickSort($left);
$right = QuickSort($right);
return array_merge($left,array($max),$right);
}else{
return $arr;
}
}
原理:快速排序使用分治思想来把待排序的数组分成两个子数组,具体步骤为:
(1)从数列中挑出一个元素。成为元素的“基准”
(2)遍历一遍数组将所用比基准小的元素放在左边,比基准大的元素放在右边
(3)通过递归,将子数组划分为更小的数组。直到子数组的元素数量小于等于1