PHP 快速排序的2種實現方法

2021-10-23 01:20:06 字數 729 閱讀 6690

<?php

/** * 快速排序的2種實現方法

*/class quick

//分別對左右繼續

$left = self::q1($left);

$right = self::q1($right);

//合併結果集合

return array_merge($left, [$mid], $right);

}//左右2端掃瞄法實現快速,不需要再合併了

public static function q2(&$arr, $low, $high)

//從最左端開始掃瞄找出大於$key的,放到右邊

while ($l < $r && $arr[$l] < $key) $l++;

if ($l < $r)

}$arr[$l] = $key;

//分別對左右2端資料繼續

if ($low < $l) self::q2($arr, $low, $l-1);

if ($high > $l) self::q2($arr, $r+1, $high);

return $arr;

}}$arr = [9,1,3,3,7,8,6,4,5,2,10];

//$res = quick::q1($arr);

$res = quick::q2($arr, 0, count($arr)-1);

print_r($res);

php實現快速排序的三種方法分享

寫了三種php快速排示例,第一種效率低但最簡單最容易理解,第二個是演算法導論上提供的單向一次遍歷找中值方法,第三種是雙向遍歷找中值經典快排演算法。三組演算法實現和比較如下 方法一 該方法比較直觀,但損失了大量的空間為代價,使用了效率較低的merge函式。在三種方法中效率最低。最壞情況下演算法退化為 ...

快速排序的php實現

快速排序的基本原理 1.任取陣列中乙個的元素作為比較基數,一般取第乙個。2.歷遍陣列,把所有小於基數的元素放在左側,把所有大於基數的元素放在右邊。這時候,基數正好處在了正確的位置 左邊的都它小,右邊的都比它大 3.為了保證後續的操作2中的基數字置不變動,接下來分別對陣列左側部分和右側部分進行上述排序...

php實現快速排序

先獲取第乙個值為關鍵字,讓i指向第乙個,j指向最後乙個,先從最後乙個找比key小的,j指向它,將它放在i指向的地方,然後i再向前走,直到找到比key大的,放在j指向的地方,就這樣迴圈,直到i j的時候,關閉迴圈。arr array 1,2,3,5,2,3,9,8,3,2,7,4,9,8,0,4,58...