您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何掌握并使用冒泡排序”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何掌握并使用冒泡排序”吧!
1.什么是冒泡排序
冒泡排序算法需要遍歷幾次數組,在每次遍歷中,比較連續相鄰的元素。如果一對元素是降序排列,則互換他們的位置,否則保持不變。這樣一來,使得較小的值像“氣泡”一樣,逐漸浮向頂部,而較大的值沉入底部,因此稱這種排序方法為冒泡排序(bubble sort )或下沉排序(sinking sort)。
第一次遍歷之后,最后一個元素將成為最大的元素。第二次遍歷之后,倒數第二個元素,將成為倒數第二大的元素。整個過程持續到所有的元素全部都已排好序。
2.圖解冒泡排序
經過第一次遍歷后,最大的數已經在數組末尾。因為最后一個數已經是最大數,因此不需要再考慮最后一對元素。
經過第二次遍歷,后兩個數已經排好序,所以只需要對除它們之外的元素進行排序。
因此,在進行第n次遍歷時,不需要考慮倒數第n-1個元素,因為它們已經排好序了!
冒泡排序偽代碼:
for(int k = 1; k < list.length; k++){ for(int j = 0; j < list.length-k; j++) { if(list[j] > list[j + 1]) { swap(list[i], list[i + 1]); } } }
3.改進后的冒泡排序
注意到,上面的排序實際上有很多次沒有發生交換,因此,我們可以對冒泡排序稍微改進下:
boolean nextPass = true; for(int k = 1; k < list.length && nextPass; k++){ nextPass = false; for(int j = 0; j < list.length-k; j++) { if(list[j] > list[j + 1]) { swap(list[i], list[i + 1]); nextPass = true; } } }
4. 冒泡排序時間復雜度
最佳情況下,冒泡排序只需要一次遍歷就能確定數組已排好序,不需要再進行下一次遍歷。因此,最佳情況下,冒泡排序時間復雜度為O(n)。
最壞情況下,冒泡排序需要 次。因此比較總次數為: $$ (n-1) + (n-2) + (n-3) + ...+ 3 + 2 + 1 = ({\frac n2^2} - {\frac n2}) = O(n^2) $$ 所以,最壞情況下,冒泡排序的時間復雜度為:O(n^2)。
5. 附上函數
public static void bubbleSort(int[] list) { boolean nextPass = true; for(int k = 1; k < list.length && nextPass; k++){ nextPass = false; for(int j = 0; j < list.length-k; j++) { if(list[j] > list[j + 1]) { int tmp = list[j]; list[j] = list[j+1]; list[j+1] = tmp; nextPass = true; } } } }
感謝各位的閱讀,以上就是“如何掌握并使用冒泡排序”的內容了,經過本文的學習后,相信大家對如何掌握并使用冒泡排序這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。