1.原理介紹
假設我們現在對「6 1 2 7 9 3 4 5 10 8」這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數,為了方便,就讓第乙個數6作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數放在6的左邊,類似下面這種排列:3 1 2 5 4 6 9 7 10 8,遞迴對左右兩個區間進行同樣排序即可。是一種不穩定(如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面)的排序演算法,平均時間複雜度為o(nlogn) ,最好時間複雜度為 o(nlogn) ,最壞時間複雜度為o(n*n) ,空間複雜度為o(nlogn) 。
2.**實現
void quicksort(int* h, int left, int right) //隨機選取哨兵放前面
h[i]=key;
quicksort(h,left,i-1);
quicksort(h,j+1,right);
}
八大排序(三) 快速排序
快速排序的基本思想如下 設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序是一種不穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算...
八大排序(五)快速排序
快速排序使用了分治策略。一 選定乙個基準數 一般選取第乙個數 然後把大於它的數都放在它右邊,把小於它的數放左邊。二 這樣就把陣列分成左右兩部分。再將左右兩部分分別遞迴執行第一步,最終當執行第一步的部分大小為一時,遞迴完成,原陣列排序完成。public class quicksort 將剛剛找到的數插...
八大排序之快速排序
快速排序 public class quicksort int arr 測試時間複雜度 o n 2 int arr new int 80000 for int i 0 i arr.length i long start time system.currenttimemillis quicksort ...