什麼是Java的快排演算法?

2021-08-19 13:20:36 字數 1275 閱讀 1527

快速排序的原理:選擇乙個關鍵值作為基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第乙個元素作為基準值。

一次迴圈:從後往前比較,用基準值和最後乙個值比較,如果比基準值小的交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值小的值才交換。找到這個值之後,又從前往後開始比較,如果有比基準值大的,交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值大的值才交換。直到從前往後的比較索引》從後往前比較的索引,結束第一次迴圈,此時,對於基準值來說,左右兩邊就是有序的了。

接著分別比較左右兩邊的序列,重複上述的迴圈。

——–為什麼快排要比氣泡排序和選擇排序的效率高呢?

——–分而治之的思想(那些 「分到左邊的數」 再也沒有機會和 「分到右邊的數」 作比較了)

舉個例子,有這麼一組數:1,2,3,4,5,15,78,89,90,100,200;一共11個。並且給出的初始順序是從小到大的, 現在要排成從大到小。快速排序的思想,就是從中抽取乙個數(稱為基準吧),然後大於基準的在一邊,小於或等於在另一邊。比如,現在隨機的抽取了78,那麼1,2,3,4,5,15會在一邊,89,90,100,200會在另一邊。這時候,注意到,從這一刻開始,小於78的那些數就再也沒有機會與大於78的數進行兩兩比較了。快速排序用了分而治之的思想

public class fastsort;

int start = 0;

int end = a.length-1;

sort(a,start,end);

system.out.println(arrays.tostring(a));

}public void sort(int a,int low,int high)

//從前往後比較

while(end>start&&a[start]<=key)//如果沒有比關鍵值大的,比較下乙個,直到有比關鍵值大的交換位置

start++;

if(a[start]>=key)

//此時第一次迴圈比較結束,關鍵值的位置已經確定了。左邊的值都比關鍵值小,右邊的值都比關鍵值大,但是兩邊的順序還有可能是不一樣的,進行下面的遞迴呼叫

}//遞迴

if(start>low) sort(a,low,start-1);//左邊序列。第乙個索引位置到關鍵值索引-1

if(end

end+1,high);//右邊序列。從關鍵值索引+1到最後乙個}}

快排 java實現

快排思想 1 確定基準值,一般是取第乙個 或者是取陣列的中間值 2 從後面開始查詢第乙個小於基準值的數,j 操作,用j來標記陣列下標 再從第二個開始,找到第乙個大於基準值的數,i 操作,用i來標記,當滿足 i!j 時,交換j和i下標對應的值,直到i j時,1.基準值歸位,2.將舊基準值置最終的位置。...

演算法基礎 快排優化 為什麼快排都會TLE

在演算法訓練中,快排應該是基礎中的基礎了,直接使用前面介紹的快排,無論是單向迴圈還是雙向迴圈方式,在特定的資料序列下,都有可能出現tle time limit exceeded 超時,這篇文章對原因和基準值的優化進行驗證和總結。總結 附錄快排本身不是一種穩定的演算法,在前面的文章中也提到過,預設的實...

python實現快排演算法 python快排演算法詳解

快排是python經典演算法之一。1 下面講解的是什麼是快排和快排的圖示。2 快排是一種解決排序問題的運算方法。3 快排的原理 在陣列中任意選擇乙個數字作為基準,用陣列的資料和基準資料進行比較,比基準數字打的數字的基準數字的右邊,比基準數字小的數字在基準數字的左邊,第一次排序之後分為比基準資料大或比...