PHP 快速排序算法解析
快速排序之所以稱之快速是因為冒泡排序是每次對比只交換相鄰的兩個值的位置,這樣每個值要移動到它最終的排序結果中所對應的位置,可能需要很多次位置的變化。下面小編給大家講述的是PHP 快速排序算法,歡迎閲讀,更多詳情請關注應屆畢業生考試網。
快速排序算法是對冒泡算法的一個優化。他的思想是先對數組進行分割, 把大的元素數值放到一個臨時數組裏,把小的元素數值放到另一個臨時數組裏(這個分割的點可以是數組中的任意一個元素值,一般用第一個元素,即$array[0]),然後繼續把這兩個臨時數組重複上面拆分,最後把小的數組元素和大的數組元素合併起來。這裏用到了遞歸的思想。
PHP實現
代碼如下:
/*
快速排序
*/
function quickSort($array)
{
if(!isset($array[1]))
return $array;
$mid = $array[0]; //獲取一個用於分割的關鍵字,一般是首個元素
$leftArray = array();
$rightArray = array();
foreach($array as $v)
{
if($v > $mid)
$rightArray[] = $v; //把比$mid大的數放到一個數組裏
if($v < $mid)
$leftArray[] = $v; //把比$mid小的數放到另一個數組裏
}
$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<br/>';
require('./'); //這裏引用的是我之前寫的冒泡算法排序
$t1 = microtime(true);
maoPao($a); //冒泡
$t2 = microtime(true);
echo (($t2-$t1)*1000).'ms';
運行結果:
代碼如下:
12.10880279541ms
772.64094352722ms
-
為什麼説結對編程實際操作起來很難
人們常説團結就是力量,那麼在編程中人多是不是也能產生更高的效率呢?下面就和小編一起來看看吧!更多內容請關注應屆畢業生網!結對編程有助於提高軟件質量和加強團隊成員合作。它有非常多的好處,但是,團隊成員真的很容易結成對子嗎?MarcosBrizeno,巴西ThoughtWorks...
-
PHP是否是最好的語言
最近被朋友們拉入了幾個技術社羣,有微信羣,也有QQ羣,尤其對一些年輕的朋友,大家樂此不疲的問題居然是PHP是最好的語言麼?我們推崇敢於質疑且獨立思考的自由精神,所以對PHP是最好的語言麼?這一問題,也是從疑問開始的。什麼是最好?《現代漢語詞典(第5版)》第1823頁對最...
-
PHP自動加載
很多的初學者在學習PHP的時候最早面對的問題之一就是require、include和require_once、include_once的相愛相殺。那麼在瞭解了它們相愛相殺的故事後,往往就開始使用起了框架。以下是關於框架的介紹,希望對大家有用,更多內容請關注應屆畢業生網!框架固然是幹活的好...
-
php二維數組相同鍵名相加實例
導語:在php二維數組雷同鍵名相加,你寫嗎?下面的是本站小編為大家蒐集的php二維數組相同鍵名相加實例,希望對你會有所幫助。Array([uid]=>19[pid]=>Array([0]=>91[1]=>81)[price]=>Array([0]=>6[1]=>14)[pnum]=>Array([0]=>1[1]=>1))求相同鍵名的值相加如(price的相...