快速排序思想:
1.选取数组中一个元素作为比较对象,一般选取第一个元素(为避免发生最坏情况可选择第一个元素、最后一个元素和中间元素的平均值作为比较对象)。
2.遍历数组,将小于比较对象的元素放入一个数组,将大于等于比较对象的元素放入另一个数组。
3.然后在按此方法分别对这两部分数据进行快速排序(递归实现)。
4.将排序好的数组合并成一个数组。
PHP代码实现:
<?php
//带排序数组
$arr = array(4,5,2,5,7,9,8,1,23,5,2,6,8,3);
function my_sort($arr){
//获取数组长度
$len = count($arr);
//长度不足1 直接return
if($len <= 1){
return $arr;
}else{
//新建两个数组,分别存比数组中第一个元素小和比第一个元素大的值
$arr_left = array();
$arr_right = array();
//从第二个元素开始循环,与数组第一个元素比较
for($i = 1;$i< $len;$i++){
//把比第一个元素小的放到$arr_left中,反之放到$arr_right中
if($arr[$i] < $arr[0]){
$arr_left[] = $arr[$i];
}else{
$arr_right[] = $arr[$i];
}
}
//将$arr_left与$arr_right分别排序后再与$arr[0]合并成一个数组,即为排序好的数组
return array_merge(my_sort($arr_left),array($arr[0]), my_sort($arr_right));
}
}
var_dump(my_sort($arr));
//输出:
// array
// 0 => int 1
// 1 => int 2
// 2 => int 2
// 3 => int 3
// 4 => int 4
// 5 => int 5
// 6 => int 5
// 7 => int 5
// 8 => int 6
// 9 => int 7
// 10 => int 8
// 11 => int 8
// 12 => int 9
// 13 => int 23