PHP 快速排序演算法詳解

2021-07-25 08:32:22 字數 1748 閱讀 5355

其實快速排序之所以稱之快速,就是因為,氣泡排序是每次對比只交換相鄰的兩個值的位置,這樣每個值要移動到它最終的排序結果中所對應的位置,可能需要很多次位置的變化。但是快速排序可在一次劃分中,就確定你選定的那個對比值在最終排序好的佇列中的位置。

概念

快速排序演算法是對冒泡演算法的乙個優化。他的思想是先對陣列進行分割, 把大的元素數值放到乙個臨時陣列裡,把小的元素數值放到另乙個臨時陣列裡(這個分割的點可以是陣列中的任意乙個元素值,一般用第乙個元素,即$array[0]),然後繼續把這兩個臨時陣列重複上面拆分,最後把小的陣列元素和大的陣列元素合併起來。這裡用到了遞迴的思想。

php實現

複製**

**如下:

/*快速排序

*/function quicksort($array)

$leftarray = quicksort($leftarray); //把比較小的陣列再一次進行分割

$leftarray = $mid;        //把分割的元素加到小的陣列後面,不能忘了它哦

$rightarray = quicksort($rightarray);  //把比較大的陣列再一次進行分割

return array_merge($leftarray,$rightarray);  //組合兩個結果

}與冒泡演算法對比

這裡我與之前寫的冒泡演算法實現的排序做了個對比,可以看出這個演算法比冒泡演算法的效率要高很多。

複製**

**如下:

$a = array_rand(range(1,3000), 1500);  //甚至在冒泡演算法超過1600個元素的時候會出現記憶體不足的提示,但這裡為了測出兩個之間的差別大小, 就設定成了1500,保證冒泡演算法也能執行完畢。

shuffle($a);  //獲取已經打亂了順序的陣列

$t1 = microtime(true);

quicksort($a);  //快速排序

$t2 = microtime(true);

echo (($t2-$t1)*1000).'ms

';require('./maopao.php');  //這裡引用的是我之前寫的冒泡演算法排序

$t1 = microtime(true);

maopao($a);   //冒泡

$t2 = microtime(true);

echo (($t2-$t1)*1000).'ms';

執行結果:

複製**

**如下:

12.10880279541ms

772.64094352722ms

php 快速排序演算法,PHP 快速排序演算法

概念 快速排序演算法是對冒泡演算法的乙個優化。他的思想是先對陣列進行分割,把大的元素數值放到乙個臨時陣列裡,把小的元素數值放到另乙個臨時陣列裡 這個分割的點可以是陣列中的任意乙個元素值,一般用第乙個元素,即 array 0 然後繼續把這兩個臨時陣列重複上面拆分,最後把小的陣列元素和大的陣列元素合併起...

php 快速排序演算法,php 快速排序函式

在php程式設計中會用到一些常用的演算法,把這些演算法 寫成函式方便以後呼叫 php快速排序函式就這樣誕生了,兩個版本,遞迴和無遞迴。可以根據實際需要選用。qsort 資料快速排序遞迴版 array to sort 需要排序的陣列 排序過程中,陣列的鍵會被替換為數字索引的鍵 如果 array to ...

快速排序演算法詳解

1.1 演算法分析 快速排序是一種不穩定的,時間複雜度為o nlogn 的排序演算法.基本思想 1.選定基準值key。2.通過雙指標不斷地移動,將比key大的值移動到key的右邊,比key小的值移動到key的左邊,直到雙指標相遇 即代表該過程已完成 3.上述過程完成後,對於以原key區分形成的兩個子...