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個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方...