基本思想:
在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。
function quickSort($arr) {
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//选择第一个元素作为基准
$base_num = $arr[0];
//遍历除了标尺外的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left_array = array(); //小于基准的
$right_array = array(); //大于基准的
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);
}
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//选择第一个元素作为基准
$base_num = $arr[0];
//遍历除了标尺外的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left_array = array(); //小于基准的
$right_array = array(); //大于基准的
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);
}
thinkphp里的写法
public function aaaa(){ // $url = "http://www.sina.com.cn/abc/de/fg.html.php?id=1"; // $arr = parse_url($url); // $path = basename($arr['path']); // $ext = explode('.', $path); // // showBug($ext); $aa =array(2,33,4,3,45,55,553); $bb = $this->quickFind($aa); showBug($bb); } public function quickFind($arr){ $length = count($arr); if ($length <= 1){ return $arr; } $one = $arr[0]; $arr1 = array(); $arr2 =array(); for($i=1;$i<$length;$i++){ if ($one > $arr[$i]){ array_push($arr1,$arr[$i]); }else{ array_push($arr2,$arr[$i]); } } $arr1 = $this->quickFind($arr1); $arr2 = $this->quickFind($arr2); return array_merge($arr1,array($one),$arr2); }输出:
array(7) { [0]=> int(2) [1]=> int(3) [2]=> int(4) [3]=> int(33) [4]=> int(45) [5]=> int(55) [6]=> int(553) }