冒泡排序是一種簡單基礎的排序算法,相信在大學課堂里老師已經講過了,現在我基於Java來實現一遍。
簡述
冒泡排序正如其關鍵詞一樣,雜亂的氣泡經過浮動,最后大的氣泡飄到了上面而小的氣泡在下面,無序的元素序列的排序規則也是如此,每次比較相鄰的兩個數值,如果前面的數值大於后面的數值則進行交換,最后會將本次遍歷出來的最大數值排到最后位,然后按如此規則對剩余的無序序列進行類似的冒泡處理。
算法描述
- 比較相鄰的兩個元素,如果前面的比后面的大,則交換兩個元素;
- 對每每相鄰的元素都進行這樣的比較操作,從開始的一對到最后一對,這樣最后的元素會是本次遍歷完剩下的最大的元素;
- 針對所有的元素執行以上步驟,除了已經指派出來的最大的元素(或序列,序列排在了最末尾)
- 重復以上步驟直至排序完成。
動圖演示
(算法動圖來源於參考資料,詳細請往下翻閱)
代碼實現
1 /** 2 * 冒泡排序 3 * 循環比較相鄰的兩個數,將較大的數放在后面 4 * @param nums 待排序數值序列 5 */ 6 private static int[] bubbleSort(int[] nums) { 7 int len = nums.length; 8 if(len == 0 || len == 1) { 9 return nums; 10 } 11 for(int i = 0; i < len; i++) { 12 for(int j = 0, subLen = len - 1 - i; j < subLen; j++) { 13 if(nums[j + 1] < nums[j]) { 14 int tmp = nums[j + 1]; 15 nums[j + 1] = nums[j]; 16 nums[j] = tmp; 17 } 18 } 19 } 20 return nums; 21 }
算法代碼實現已自我驗證,歡迎糾錯或者優化交流。
算法分析
冒泡排序算法時間復雜度分析,最佳情況:T(n) = O(n),最差情況:T(n) = O(n2),平均情況:T(n) = O(n2)
參考資料
本算法的實現和討論,均基於網絡博客,並在此基礎上進行了自我優化和整理,更加詳細和精彩內容,可移步以下博客:
1、https://www.cnblogs.com/guoyaohua/p/8600214.html