1. 程式人生 > 其它 >二叉樹(一): 遍歷

二叉樹(一): 遍歷

演算法思想

  氣泡排序屬於一種典型的交換排序。

  交換排序顧名思義就是通過元素的兩兩比較,判斷是否符合要求,如過不符合就交換位置來達到排序的目的。氣泡排序名字的由來就是因為在交換過程中,類似水冒泡,小(大)的元素經過不斷的交換由水底慢慢的浮到水的頂端。

  氣泡排序的思想就是利用的比較交換,利用迴圈將第 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; } } } }