學習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
這幾種排序演算法,只是簡單實現了排序的功能,還有待改進,望指教,大家有什麼別的演算法也可以分享一下