1.快速排序(递归)
实现思路:以$arr=[29,3,44,6,77,56,22,2223,33]数组为例,以数组的第一个元素为参照,小于等于他的元素归为$minArr=[3,6,22],大于他的元素归为$maxArr=[44,77,56,2223,33];最后返回数据应该是 $minArr ,$arr[0],$maxArr组成,如果数组只有一个或者少于一个元素,则直接返回这个数组;再用同样的方法去排序$minArrr和$maxArr.代码如下:
/**
* 快速排序(递归方法实现)
* @param type $arr
*/
function meSort($arr)
{
// 获取数组元素个数
$len = count($arr);
// 递归出口:如果数组元素少于等于一个,则直接返回
if($len <= 1)return $arr;
// 以数组第一个元素为参照元素
$mid = $arr[0];
// 小于等于参照元素的数组元素
$minArr = [];
// 大于参照元素的数据元素
$maxArr = [];
// 找出$minArr 和 $maxArr
for($i=1;$i
if($arr[$i]<=$mid){
$minArr[] = $arr[$i];
}else{
$maxArr[] = $arr[$i];
}
}
// 返回且合并 $minArr 和 $mid 和 $maxArr;以同样的方法去排序 $minArr 和 $maxArr
return array_merge(meSort($minArr),[$mid],meSort($maxArr));
}
这种排序方法适合需要排序的数组元素个数没有那么多,如果数组元素个数过多,递归的次数就会越多,效率会越慢.
2.冒泡排序
实现思路:以$arr=[29,3,44,6,77,56,22,2223,33]数组为例,从第一个元素开始和他的后一个元素进行比较,如果他的后一个元素比他小,则两者交换位置,以此类推,代码如下:
/**
* PHP经典排序算法 - 冒泡排序
* $arr array 需要排序的数组
*/
function meSort($arr)
{
// 计算数组的元素个数
$len = count($arr);
// 如果数组元素个数小于等于一个 则直接返回数组
if($len <= 1)return $arr;
// 外层循环 控制需要排序的元素个数
for($i = 0;$i < $len;++$i){
//内层循环 控制每次循环的目标元素(最大的元素)
for($j = 0;$j < $len-1-$i; ++$j){
// 元素交换位置 寻找出本轮最大的元素
if($arr[$j] > $arr[$j+1]){
$tem = $arr[$j + 1];
//交换位置
$arr[$j + 1] = $arr[$j];
$arr[$j] = $tem;
}
}
}
// 返回结果
return $arr;
}
这种排序算法比较常见,适用范围广。