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()啥的,但底层逻辑清楚了,调优、排查就更得心应手了。

txt 文件大小:1.8KB