冒泡排序,在某些場景下優化後快了幾十倍!

喜歡互聯網技術的同學,一定要關注我哦!

可以先去看一下關於排序的相關概念哦

傳送門:《 》

冒泡排序是交換排序的一種,同時也是排序算法中很簡單的一種。

冒泡排序的原理

比較相鄰兩個元素,若第一個比第二個大,則交換,直到沒有!

圖解冒泡排序

冒泡排序,在某些場景下優化後快了幾十倍!

冒泡排序

從上圖的運行原理,我們知道,

首先在第一趟比較的時候,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)。

下次將會有更精彩的內容哦,感興趣的同學一定要關注哦!


分享到:


相關文章: