華文網

學習Java絕對要懂的,Java程式設計中最常用的幾種排序演算法

今天給大家分享一下Java中幾種常見的排序演算法的Java代碼

推薦一下我的Java學習群515675832,群裡有免費的學習視頻和專案給大家練手。大神有空時也會帶帶大家的,學Java的過程中一定要多問多記,不要怕問題,要去主動的解決問題。

冒泡排序

選擇排序

插入排序

歸併排序

例如:降冪排{10,5,9,6}分為{10,5},{9,6}然後{5,10},{6,9}然後完成

快速排序

就最後一個快速排序可能大家看不太懂,我就舉個例子吧

開始輸入以下陣列

創建變數i=0(指向第一個資料), j=5(指向最後一個資料), k=6(賦值為第一個資料的值)。

我們要把所有比k小的數移動到k的左面,所以我們可以開始尋找比6小的數,從j開始,從右往左找,不斷遞減變數j的值,我們找到第一個下標3的資料比6小,於是把資料3移到下標0的位置,把下標0的資料6移到下標3,完成第一次比較:

i=0 j=3 k=6

接著,開始第二次比較,這次要變成找比k大的了,而且要從前往後找了。遞加變數i,發現下標2的資料是第一個比k大的,於是用下標2的資料7和j指向的下標3的資料的6做交換,

資料狀態變成下表:

i=2 j=3 k=6

稱上面兩次比較為一個迴圈。

接著,再遞減變數j,不斷重複進行上面的迴圈比較。

在本例中,我們進行一次迴圈,就發現i和j“碰頭”了:他們都指向了下標2。於是,第一遍比較結束。得到結果如下,凡是k(=6)左邊的數都比它小,凡是k右邊的數都比它大:

如果i和j沒有碰頭的話,就遞加i找大的,還沒有,就再遞減j找小的,如此反復,不斷迴圈。

注意判斷和尋找是同時進行的。

然後,對k兩邊的資料,再分組分別進行上述的過程,直到不能再分組為止。

注意:第一遍快速排序不會直接得到最終結果,只會把比k大和比k小的數分到k的兩邊。為了得到最後結果,需要再次對下標2兩邊的陣列分別執行此步驟,然後再分解陣列,直到陣列不能再分解為止(只有一個資料),才能得到正確結果。

最後需要注意兩點(Java學習交流群515675832,

每天都會精挑細選一個項目新玩法出來詳細講解,分享!包括答疑解惑! )

冒泡排序與選擇排序有點類似,都是先通過依次比較將最小/大的元素放到最後;不同的是冒泡排序一次操作中,每次比較後,若需要都進行位置交換;而選擇排序是每次比較之後,將最小的值的位置記錄下來,最後與末尾位置交換。

插入排序的特點是從序列的第二個元素開始,與第一個元素排序,完成一輪;第二輪從第三個元素,依次與前面比較,然後排序, 其實就是做冒泡排序。

以上均假設陣列的長度為n

這幾種排序演算法,只是簡單實現了排序的功能,還有待改進,望指教,大家有什麼別的演算法也可以分享一下

完成一輪;第二輪從第三個元素,依次與前面比較,然後排序, 其實就是做冒泡排序。

以上均假設陣列的長度為n

這幾種排序演算法,只是簡單實現了排序的功能,還有待改進,望指教,大家有什麼別的演算法也可以分享一下