快速排序算法是排序算法中的经典算法之一,其核心思想是:

  1. 从要排序的数据中选择一个作为基准数
  2. 把所有比基准数小的数据放到左分区,把所有比基准数大的数据放到右分区(从小到大排序)
  3. 对左右两部分数据重复前两步操作,直至两个分区只剩一个数据

这个算法的关键就在于分区和递归(循环),使用 PHP 代码可以这样实现

// 无重复数据的快速排序实现
function quickSort($array) {
    // 基准数为数组的第一个元素
    $benchMark = $array[0];
    // 左分区元素(比基准数小的数据)
    $up = array();
    // 右分区元素(比基准数大的数据)
    $down = array();

    // 遍历数组,将数据按照与基准数的大小关系分区
    foreach ($array as $key => $value) {
        // 小于基准数的数据放置在左分区
        if ($value < $benchMark) {
            $up[] = $value;
        }
        // 大于基准数的数据放置在右分区
        if ($value > $benchMark) {
            $down[] = $value;
        }
    }

    // 对左分区递归调用快速排序算法
    if (count($up) > 1) {
        $up = quickSort($up);
    }
    // 对右分区递归调用快速排序算法
    if (count($down) > 1) {
        $down = quickSort($down);
    }

    // 返回排序好的数据,左分区+基准数+右分区
    return array_merge($up, [$benchMark], $down);
}

如果有更加简洁、高效的实现方式,欢迎发邮件给我哦~