基本算法思想
快速排序是一種分治算法,同‘歸併排序’思想相同,呈互補。將數組切分(partition)爲兩部分,對獨立兩部分進行排序。歸併排序是對數組等分切割後,將有序子序列歸併得到有序數組;快速排序是安裝數組的內容決定切分位置後,兩個子數組有序後整個數組也有序。
特點
- 原地排序(僅需要很小的輔助棧)
- 長度爲 N的數組排序時間和 NlgN成正比
- 內循環比大多數排序要短
快速實現算法
public class quick{
pulic static void sort(Comparable[] a){
StdRandom.shuffle(a); //消除對輸入依賴
sort(a, 0, a.length-1);
}
private static void sort(Comparable[] a, int lo, int hi){
if(hi <= lo) return;
int j = partition(a, lo, hi);
sort(a, lo, j-1); //左側排序
sort(a, j, hi); //右側排序
}
}