1.快速排序(递归)php
实现思路:以$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<$len;++$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.冒泡排序code
实现思路:以$arr=[29,3,44,6,77,56,22,2223,33]数组为例,从第一个元素开始和他的后一个元素进行比较,若是他的后一个元素比他小,则二者交换位置,以此类推,代码以下:排序
<?php /** * 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; }
这种排序算法比较常见,适用范围广。递归