喜歡互聯網技術的同學,一定要關注我哦!
可以先去看一下關於排序的相關概念哦
傳送門:《 》
冒泡排序是交換排序的一種,同時也是排序算法中很簡單的一種。
冒泡排序的原理
比較相鄰兩個元素,若第一個比第二個大,則交換,直到沒有!
圖解冒泡排序
從上圖的運行原理,我們知道,
首先在第一趟比較的時候,7跟5、6、4、3分別比較了一次,最後7是最大的,所以放在最後。
在第二趟比較的時候,5跟6比,然後不變位置,6跟4比,然後4和6交換,6跟3比,然後6和3交換,最後6放在最後。
在第三趟比較的時候,5和4比,交換位置,5和3比,交換位置,最後5放在最後。
在第三趟比較的時候,4和3比,交換位置,最後4放在最後。
最後比較完成。
JAVA實現冒泡排序
執行結果
為了方便測試,我隨機生成了一個又8個元素組成的數組,然後在main函數里面,調用bubbleSort方法
可以明顯看出,測試的結果,和我上面給到的圖解是一模一樣的過程!可見測試成功了!
經典冒泡排序優化
可以看見上面的代碼,無論怎樣都要執行N的平方次,儘管數據已經基本有序的時候,上面的冒泡還是進行兩兩比較,這樣在少數數據的時候,看不出什麼效果,但是當數據量大的時候,就會很費功夫了。所以有了下面的優化:
通過一個flag來判斷是否有序,當已經有序的時候,不進行交換,直接退出循環。
測試
我使用了一個完全有序的數組,然後分別運行兩個方法,可見耗時差別之大!
正常隨機的結果:和原來的差別不大。
完全有序的結果:碾壓沒優化的代碼。
在優化後的代碼,最好情況下,待排序記錄序列為正序,這樣算法只進行了n-1次比較,不需要移動數據,時間複雜度為O(n)。
下次將會有更精彩的內容哦,感興趣的同學一定要關注哦!
閱讀更多 猿小生 的文章