數據結構(7)快速排序

快速排序的基本思想描述:

對於一個長度爲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/>";
	}


?>

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章