2024年4月16日发(作者:)
php实现快速排序的三种方法
php实现快速排序的三种方法
三种php快速排示例,第一种效率低但最简单最容易理解,第二个是算法导论上提
供的单向一次遍历找中值方法,第三种是双向遍历找中值经典快排算法。下面是店铺为大
家带来的php实现快速排序的三种方法,欢迎阅读。
方法一:该方法比较直观,但损失了大量的空间为代价,使用了效率较低的.merge
函数。在三种方法中效率最低。最坏情况下算法退化为(O(n*n))
代码如下:
function quick_sort($array) {
if(count($array) <= 1) return $array;
$key = $array[0];
$rightArray = array();
$leftArray = array();
for($i = 1; $i < count($array); $i++) {
if($array[$i] >= $key) {
$rightArray[] = $array[$i];
} else {
$leftArray[] = $array[$i];
}
}
$leftArray = quick_sort($leftArray);
$rightArray = quick_sort($rightArray);
return array_merge($leftArray, array($key), $rightArray);
}
方法二:该算法来自算法导论,叫作Nico Lomuto方法(感兴趣goole上有详细说
明)使用最经典的单方向一次遍历找到中值。
但这种算法在最坏情况下(例如值相同的数组,需要n-1次划分,每一次划分需要
O(n) 时间去掉一个元素)最坏情况下为O(n*n)
代码如下:
发布评论