阿布學排序之快速排序

2021-06-22 02:01:28 字數 1375 閱讀 9651

package quicksort;

/** * 快速排序是一種劃分交換排序,採用了分治策略,時間複雜度為o(nlogn),總共需要logn次選取基準數,整個是乙個樹結構,每一層的複雜度是o(n),所以總共是o(nlogn)

* 思想:

* 1、先從數列中取出乙個數作為基準數

* 2、將比這個數大的數全都放到它的左邊,比它小的全都放它右邊

* 3、再對左右區間重複第二步,直到各區間只有乙個數

* @author abuge

* 例:

* 0 1 2 3 4 5 6 7 8 9

* 72 6 57 88 60 42 83 73 48 95

* 將取值比喻成挖坑

*步驟:

*1、選擇基準數,挖個坑,這裡用0個元素,確定左右區間i = r, j = l

*2、從後向前遍歷,如果比基準數大則j--,直到比基準數小(前提是i < j),找到後將j對應的值賦給挖的坑,這個j對應的值就出現了新的坑,將i++,繼續下個數的比較

*3、從前向後遍歷,如果比基準數小則i++,直到比基準數大(前提是i < j),這個j對應的值就出現了新的坑找到後將i對應的值賦給挖的坑,將j--,繼續下個數的比較

*4、重複2和3步,直到i == j,將基準數填入到a[i]中

*/public class quicksortdemo

//確定是否是由於base <= array[j]引發的上乙個while的退出,如果是則將a[j]填入上一次的坑

if(i < j)

//第三步從前向後比較

while(i < j && base >= array[i])

//確定是否是由於base <= array[j]引發的上乙個while的退出,如果是則將a[i]填入上一次的坑

if(i < j)

}//此時i == j,執行第四步

array[i] = base;

return i;

} //運用分治和遞迴的方法進行快速排序,完成遞增排序

public static void quicksort(int array, int left, int right)

} public static void main(string args)

; int len = array.length;

system.out.print("排序前:");

for(int a : array)

quicksort(array, 0, len - 1);

system.out.println();

system.out.print("排序後:");

for(int a : array)

}}

快速排序演算法,阿哈演算法

假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 就是乙個用來參照的數 為了方便,就讓第乙個數6作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數放在6的左邊,類似下面這種排列。3 1 2 5 4...

排序之快速排序

快速排序的在內排中起到比較重要的作用,平均時間複雜度達到o nlogn 公升序快速排序 1 int partition vector vi,int start,int end 11 vi start key 12return start 13 14void quickcore vector vi,i...

排序之快速排序

有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方...