PHP 语言 实现数组快速排序的几种方法

PHP阿木 发布于 2025-07-01 9 次阅读


摘要:快速排序是一种高效的排序算法,其基本思想是通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。本文将围绕PHP语言,详细介绍几种快速排序的实现方法。

一、

快速排序是一种非常实用的排序算法,其时间复杂度为O(nlogn),在PHP中实现快速排序可以有效地提高数据处理效率。本文将介绍几种在PHP中实现快速排序的方法,包括递归法和迭代法。

二、递归法实现快速排序

递归法是快速排序中最常见的一种实现方式,其基本思想是选择一个基准值,将数组分为两部分,一部分比基准值小,另一部分比基准值大,然后递归地对这两部分进行排序。

以下是使用递归法实现快速排序的PHP代码示例:

php

function quickSortRecursive($array) {


if (count($array) < 2) {


return $array;


}


$left = $right = array();


reset($array);


$pivot_key = key($array);


$pivot = array_shift($array);


foreach ($array as $k => $v) {


if ($v < $pivot) {


$left[$k] = $v;


} else {


$right[$k] = $v;


}


}


return array_merge(quickSortRecursive($left), array($pivot_key => $pivot), quickSortRecursive($right));


}

// 示例


$array = array(3, 6, 8, 10, 1, 2, 1);


$sortedArray = quickSortRecursive($array);


print_r($sortedArray);


三、迭代法实现快速排序

迭代法是递归法的改进,通过使用栈来模拟递归过程,避免了递归带来的额外开销。

以下是使用迭代法实现快速排序的PHP代码示例:

php

function quickSortIterative($array) {


$stack = array();


$left = 0;


$right = count($array) - 1;

while ($left < $right) {


$stack[] = $left;


$stack[] = $right;


$left++;


}

while (!empty($stack)) {


$right = array_pop($stack);


$left = array_pop($stack);


$pivot = $array[$left];


$i = $left - 1;


for ($j = $left; $j <= $right; $j++) {


if ($array[$j] < $pivot) {


$i++;


$temp = $array[$i];


$array[$i] = $array[$j];


$array[$j] = $temp;


}


}


$temp = $array[$left];


$array[$left] = $array[$i + 1];


$array[$i + 1] = $temp;

$pivotIndex = $i + 1;


if ($pivotIndex > 0) {


$left = 0;


$right = $pivotIndex - 1;


} else {


$left = $pivotIndex + 1;


$right = count($array) - 1;


}


}

return $array;


}

// 示例


$array = array(3, 6, 8, 10, 1, 2, 1);


$sortedArray = quickSortIterative($array);


print_r($sortedArray);


四、总结

本文介绍了两种在PHP中实现快速排序的方法:递归法和迭代法。递归法简单易懂,但可能会因为递归深度过大而导致栈溢出;迭代法则避免了递归的开销,但代码相对复杂。在实际应用中,可以根据具体需求选择合适的实现方法。

快速排序是一种非常实用的排序算法,在PHP中实现快速排序可以有效地提高数据处理效率。希望本文对您有所帮助。

(注:本文仅为示例,实际应用中可能需要根据具体情况进行调整。)