其實快速排序之所以稱之快速,就是因為,氣泡排序是每次對比只交換相鄰的兩個值的位置,這樣每個值要移動到它最終的排序結果中所對應的位置,可能需要很多次位置的變化。但是快速排序可在一次劃分中,就確定你選定的那個對比值在最終排序好的佇列中的位置。
概念
快速排序演算法是對冒泡演算法的乙個優化。他的思想是先對陣列進行分割, 把大的元素數值放到乙個臨時陣列裡,把小的元素數值放到另乙個臨時陣列裡(這個分割的點可以是陣列中的任意乙個元素值,一般用第乙個元素,即$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區分形成的兩個子...