快速排序的基本思想描述:
對於一個長度爲N的待排序數列quick_sort($array)其運用快速排序思想爲:
1.如果$array中的元素個數爲0,或者爲1個時,則返回,否則繼續
2.選取$array中的一個元素$base_value作爲基準數(即樞軸).
3.將所有小於或等於$base_value的元素都放在基準數的左邊,將所有大於$base_value的元素放在基準數的右邊.
4.再分別從其$base_value左邊的數組和右邊的數組中選取出一個基準數,再分別進行第3步的步驟
5.當所有所分的$array中的元素個數爲0或者爲一個時,則證明已經將所有元素進行排序完成
快速排序的PHP實現:
<?php
function quick_sort($array){
$length = count($array); //獲取數組長度
//判斷數組長度,若其長度小於或等於1,則證明該數組已經排序完成過者爲無效數組
if($length <= 1)
{
return $array;
}
$base_value = $array[0]; //設第一個值爲基準數
$array_left = array();//該數組用於存放小於或等於基準數的值
$array_right = array(); //該數組用於存放大於基準數的值
for ($i=1;$i<$length;$i++)
{
//從左至右尋找第一個小於基準數的值
if($array[$i] <= $base_value){
$array_left[] = $array[$i];
}else{
$array_right[] = $array[$i];
}
}
/**********************遞歸排序**************************/
//對小於或等於基準數的數組進行一樣的排序步驟
$array_left = quick_sort($array_left);
//對大於基準數的數組進行一樣的排序步驟
$array_right = quick_sort($array_right);
//將排完序後的基準數左邊的數組和基準數右邊的數組進行合併
return array_merge($array_left,array($base_value),$array_right);
}
$arr=array(34,75,44,21,38,9,64,19,88,15);
$res=quick_sort($arr);
foreach($res as $key => $value){
echo "key: ".$key."value :".$value."<br/>";
}
?>