PHP数组排序算法插入排序、选择排序、冒泡排序与快速排序
PHP 的数组排序真是个老生常谈的问题,但写得清晰、有代码又能马上用的资源还真不多。这个整理了几种常用的排序算法:插入排序、选择排序、冒泡排序、快速排序,都配了完整的 PHP 代码,挺适合新手理解底层逻辑,也方便老手复习下经典写法。
插入排序的思路就像整理扑克牌,从头往后遍历,遇到小的就插到前面去。代码也简单,逻辑清楚。
function insertSort($arr) {
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
$tmp = $arr[$i];
$j = $i - 1;
while ($j >= 0 && $arr[$j] > $tmp) {
$arr[$j + 1] = $arr[$j];
$j--;
}
$arr[$j + 1] = $tmp;
}
return $arr;
}
选择排序就比较憨厚了,每次都找当前最小的值,放到前面。虽然效率一般,但胜在直观好懂。
function selectSort($arr) {
$count = count($arr);
for ($i = 0; $i < $count; $i++) {
$k = $i;
for ($j = $i + 1; $j < $count; $j++) {
if ($arr[$k] > $arr[$j]) $k = $j;
}
if ($k != $i) {
$tmp = $arr[$i];
$arr[$i] = $arr[$k];
$arr[$k] = $tmp;
}
}
return $arr;
}
冒泡排序就更耳熟能详了吧?两个两个比,不对就交换,一轮一轮往上冒,像汽泡一样,名字也挺形象。
function bubbleSort($array) {
$count = count($array);
for ($i = 0; $i < $count - 1; $i++) {
for ($j = $count - 1; $j > $i; $j--) {
if ($array[$j] < $array[$j - 1]) {
$tmp = $array[$j];
$array[$j] = $array[$j - 1];
$array[$j - 1] = $tmp;
}
}
}
return $array;
}
快速排序属于性能比较强的那类了,核心是递归+分治:每次选个基准,把数组分成左右两边再递归。写法多种多样,喜欢折腾的你可以多试试不同版本。
function quickSort($array) {
if (count($array) <= 1) return $array;
$pivot = $array[0];
$left = $right = [];
for ($i = 1; $i < count xss=removed xss=removed>
如果你在写排序相关的功能,比如用户排行榜、商品价格排序,那这些基础算法还是蛮有参考价值的。虽然项目里多数直接用sort()
、usort()
啥的,但底层逻辑清楚了,调优、排查就更得心应手了。
1.8KB
文件大小:
评论区