php 经典排序,PHP经典排序算法

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;

}

这种排序算法比较常见,适用范围广。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值