經典排序算法之快速排序

/*原理:選擇數組中的第一個元素爲基準數,進行一趟掃描後將所有小於基準數的元素放置在左邊數組;所有大於基準數的元素放置在右邊數組;
直到子數組中的元素小於或者等於一個元素,最後將其合併爲一個數組輸出*/
function quick_sort($arr=array(),$len=0){
	//判斷數組中的元素個數如果小於等於1則返回該數組
	if($len<=1){
		return $arr;
	}
	//選擇基準數
	$base_num=$arr[0];
	//創建兩個左右數組分別放置一趟掃描後放置的元素
	$left_arr=array();
	$right_arr=array();
	for ($i=0; $i < $len; $i++) { 
		if($arr[i]<$base_num){
			$left_arr[]=$arr[$i];//將小於基準數的元素放置左邊數組的末尾此方法和array_push方法相同執行時間較快
		}
		else{
			$right_arr[]=$arr[$i];
		}
	}
	$left_len=count($left_arr);
	$left_arr=quick_sort($left_arr,$left_len);//對左邊數組進行遞歸調用再次快速排序;
	$right_len=count($right_arr);
	$right_arr=quick_sort($right_arr,$right_len);//對右邊數組進行遞歸調用再次快速排序;

	return array_merge($left_arr,array($base_num),$right_arr)//將數組進行合併輸出;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章