1 快速排序簡介
概括:
- 快速排序的基本思想:透過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。
。小夥伴們仔細看下面的動態圖哦~
完整程式碼塊:
public static function quick($arr){
if(count($arr)<=1){
return $arr;
}
$k=$arr[0];
$x=array();
$y=array();
$_size=count($arr);
for($i=1;$i<$_size;$i++){
if($arr[$i]<=$k){
$x[]=$arr[$i];
}elseif($arr[$i]>$k){
$y[]=$arr[$i];
}
}
$x=Sort::quick($x);
$y=Sort::quick($y);
return array_merge($x,array($k),$y);
}
2 分析程式碼塊 具體分析到程式碼註釋哦 ~
快速排序
public static function quick($arr){
if(count($arr)<=1){ //如果陣列根本就一個元素就直接返回 不用在排序咯
return $arr;
}
$k=$arr[0];//定義一個初始要排序的值 預設為陣列第一個
$x=array();//定義比要排序的值 小的陣列塊
$y=array();//定義比要排序的值 大的陣列塊
$_size=count($arr);//統計陣列的大小
for($i=1;$i<$_size;$i++){//迴圈陣列 記住這邊要從索引1 開始
if($arr[$i]<=$k){//如果當前的值小於 要排序的值
$x[]=$arr[$i];//就把小於的值放到 小的陣列塊中
}elseif($arr[$i]>$k){//如果當前的值大於 要排序的值
$y[]=$arr[$i];//就把大於的值放到 大的陣列塊中
}
}
$x=Sort::quick($x);//依次遞迴執行 這樣就會得到小的陣列塊
$y=Sort::quick($y);//依次遞迴執行 這樣就會得到大的陣列塊
return array_merge($x,array($k),$y);//最後在合併下 小的模組+中間的模組【初始要排序的值】+大的模組 就ok~
}
// print_r(Sort::quick($arr));
3 時間複雜度 分析
本作品採用《CC 協議》,轉載必須註明作者和本文連結