Java排序演算法 快速排序

2021-07-10 01:17:27 字數 1415 閱讀 2890

一.思想:

對氣泡排序演算法的一種改進。通過一趟排序將排序的資料分割成兩個部分,其中一部分的所有資料都比另一部分的所有資料都要小,然後再按此方法對這兩部分分別再進行快速排序,依次類推。實現為:

開始時先設兩個變數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)

三 快速排序 實現和效率 首先,在這一串數字中挑乙個基準數,作為排序的參考,將大於該基準數的數字放在後面,小於基準數的數字放在前面。然後,這樣一來,一串數字分成了兩部分,左部分都比基準數小,右部分都比基準數大。接著,同樣的方法,再分別從左右部分都挑出乙個基準數,同樣作為排序的參考,同樣將大於該基準數...