一.思想:
對氣泡排序演算法的一種改進。通過一趟排序將排序的資料分割成兩個部分,其中一部分的所有資料都比另一部分的所有資料都要小,然後再按此方法對這兩部分分別再進行快速排序,依次類推。實現為:
開始時先設兩個變數i=start,j=end;
以第乙個元素作為中間點,pivot=num[i];
以j--的形式從後向前搜尋,找到第乙個比pivot小的,則將num[i] = num[j]
以i++的形式從前向後搜尋,找到第乙個比pivot大的,則將num[j]=num[i];
不斷重複3,4,直到i=j,最後使得num[i]=pivot;
這樣就可以把小於pivot的值全部放在pivot前面,把大於pivot的值全部放在pivot後面。
二.例子:
比如5,6,4,2,3,
pivot=5,i=0,j=5。用j--先從後往前開始搜尋,發現3<5,則執行num[i]=num[j],執行後序列為3,6,4,2,3,
用i++從前開始搜尋,當i=1時num[1]=6<5,執行num[j]=num[i],執行後序列為3,6,4,2,6,
再用j--從後往前搜尋,當j=4時,num[j]=2<5,則執行num[i]=num[j],執行後序列為3,2,4,2,6
再用i++從前往後搜尋,一直到i=j,沒有發現比pivot小的數,則執行num[i]=pivot,此時序列為3,2,4,5,6.
這樣一趟迴圈,就可以以5為分界線,小於5的值全在5左邊,大於5的值全部在5右邊。
第二趟,第三趟以此類推。
三.實現**:
public class test;
quicksort(data,0,data.length - 1);
printdata(data);
}private static void printdata(int data)
}private static void quicksort(int data,int start,int end)
data[i] = flag;
if( (i - start) > 1) quicksort(data, start, i - 1);
if( (end - i) > 1) quicksort(data, i + 1, end);
}}
四.複雜度與應用:
時間複雜度為:o(nlogn)
空間複雜度為o(1) 是不穩定的排序演算法。
應用:一般情況下,該演算法是最快的排序演算法(某些情況下有比這個演算法更快的演算法),適用於大部分場合,但是如果資料量巨大,比如說幾百萬條時,就可能會發生堆疊溢位的錯誤,所以當資料量巨大的時候,可以考慮堆排序,歸併排序等等。
java排序演算法 快速排序
陣列 2,6,3,6,5,9,1 輸出 1 2 3 5 6 6 9 private static void paixu int arrs,int h,int e while arrs x arrs e 交換值 int m m arrs h arrs h arrs e arrs e m 2,6,3,6...
java快速排序演算法
package com.head.swift 快速排序 public class main sorts a,0,a.length 1 對陣列a進行公升序排列 輸出陣列 for int i a public static void sorts int a int left int right if i...
演算法 快速排序(Java)
三 快速排序 實現和效率 首先,在這一串數字中挑乙個基準數,作為排序的參考,將大於該基準數的數字放在後面,小於基準數的數字放在前面。然後,這樣一來,一串數字分成了兩部分,左部分都比基準數小,右部分都比基準數大。接著,同樣的方法,再分別從左右部分都挑出乙個基準數,同樣作為排序的參考,同樣將大於該基準數...