二叉樹(一): 遍歷
阿新 • • 發佈:2021-06-17
演算法思想
氣泡排序屬於一種典型的交換排序。
交換排序顧名思義就是通過元素的兩兩比較,判斷是否符合要求,如過不符合就交換位置來達到排序的目的。氣泡排序名字的由來就是因為在交換過程中,類似水冒泡,小(大)的元素經過不斷的交換由水底慢慢的浮到水的頂端。
氣泡排序的思想就是利用的比較交換,利用迴圈將第 i 小或者大的元素歸位,歸位操作利用的是對 n 個元素中相鄰的兩個進行比較,如果順序正確就不交換,如果順序錯誤就進行位置的交換。通過重複的迴圈訪問陣列,直到沒有可以交換的元素,那麼整個排序就已經完成了。
氣泡排序效能
演算法 | 最好時間 | 最壞時間 | 平均時間 | 額外空間 | 穩定性 |
---|---|---|---|---|---|
冒泡 | O(n) | O(n2) | O(n2) | 1 | 穩定 |
關於穩定性:因為在比較的過程中,當兩個相同大小的元素相鄰,只比較大或者小,所以相等的時候是不會交換位置的。而當兩個相等元素離著比較遠的時候,也只是會把他們交換到相鄰的位置。他們的位置前後關係不會發生任何變化,所以演算法是穩定的。
關於最優時間複雜度為什麼是O(n),當然是優化過演算法之後了!大家繼續向下看就知道了!。
氣泡排序常規版-程式碼實現
import java.util.Arrays; public class ry { public static void main(String[] args) { int[] values = {3, 1, 4, 2, 9, 0, 7, 4, 8, 5}; System.out.println("排序前陣列:" + Arrays.toString(values)); int temp; for (int i = 0; i < values.length; i++) { boolean flag = true; for (int j = 0; j < values.length - i - 1; j++) { if (values[j] < values[j + 1]) { temp= values[j]; values[j] = values[j + 1]; values[j + 1] = temp; flag = false; } System.out.println("第" + i + "趟:第" + j + "次:" + Arrays.toString(values)); } if (flag) { break; } } } }