您的位置:首頁>科技>正文

學習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

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

Next Article
喜欢就按个赞吧!!!
点击关闭提示