冒泡排序是討論最多的算法之一,它比較容易理解,但是效率較低。如果數組是已排序的,冒泡排序只需要遍歷一次數組,不過最壞的情況下運行時間為 O(n2),非常低效。
儘管如此,理解這個算法依然很重要,需要明白它為什麼效率低下。
本文將介紹實現冒泡排序的兩個思路。
思路1
遍歷數組,相鄰的兩個元素之間進行相互比較如果當前元素大於下個元素,交換它們否則,把指針繼續移動,然後對比接下來兩個元素遍歷到了數組結尾時,我們知道最大的元素已經位於數組最後的位置了重複上述過程N次,N是數組的長度,直至排序完成
實現代碼如下:
上面的代碼中,我們用了兩個嵌套循環,外層循環每運行一次,指針 j 都會減一,因為我們知道該位置的值已經排序了。
思路2
遍歷數組,臨近的元素相互比較大小如果當前元素比下個元素大,則交換它們標記交換操作已發生如果交換操作已發生,則再次遍歷該數組當沒有交換操作發生時,我們就知道該數組排序已完成
在上述代碼中,我們只需要一個指針即可。我們用了一個變量來存儲布爾值,用於標示是否發生了交換操作。和思路1不同的地方是,我們每次都要對比數組中所有的元素。
複雜度
平均時間複雜度是 O(n 2)。