氣泡排序演算法及優化

2021-08-10 07:10:24 字數 1081 閱讀 7766

氣泡排序是一種典型的交換排序演算法,通過交換資料元素的位置進行排序。

從序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最大(小)的資料元素放到隊尾。

氣泡排序演算法的執行過程如下:

1、比較相鄰的元素。如果第乙個比第二個大(小),就交換他們兩個。

2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大(小)的數。

3、針對所有的元素重複以上的步驟,除了最後已經選出的元素(有序)。

4、持續每次對越來越少的元素(無序元素)重複上面的步驟,直到沒有任何一對數字需要比較,則序列最終有序。

示例

- (void)bubblesort:(nsmutablearray *)array }}

}

方法:設定標識變數提前結束排序

原理:標誌變數用於記錄每趟氣泡排序是否發生資料元素位置交換。如果沒有發生交換,說明序列已經有序了,不必繼續進行下去了。

- (void)bubblesort:(nsmutablearray *)array 

}if (ischange == 0) }}

時間複雜度

當原始序列「正序」排列時,氣泡排序總的比較次數為n-1,移動次數為0,也就是說氣泡排序在最好情況下的時間複雜度為o(n);

當原始序列「逆序」排序時,氣泡排序總的比較次數為n(n-1)/2,移動次數為3n(n-1)/2次,所以氣泡排序在最壞情況下的時間複雜度為o(n^2);

當原始序列雜亂無序時,氣泡排序的平均時間複雜度為o(n^2)。

空間複雜度

氣泡排序排序過程中需要乙個臨時變數進行兩兩交換,所需要的額外空間為1,因此空間複雜度為o(1)。

穩定性氣泡排序在排序過程中,元素兩兩交換時,相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。

氣泡排序及演算法優化

用雙重迴圈來控制,當相鄰元素不滿足要求的順序排列 從小到大或從大到小 時,就將兩元素交換位置,以此逐漸遍歷。void bubblesort int array long endtime system.currenttimemillis 列印排序後的前10個數 for int i 0 i 10 i s...

氣泡排序演算法及優化

正常的兩兩交換實現 private static void sort1 int a time system.out.println 跑了 time 次 system.out.println arrays.tostring a 當陣列後面的排好過後就不在執行實現 private static void...

氣泡排序演算法詳解及優化

排序原理 比較兩個相鄰的元素,將值大的元素交換至右端,小的元素向上冒泡,這也是冒泡演算法名稱的由來。排序流程如下 1 對陣列中的各資料,依次比較相鄰的兩個元素大小,即第0和第1個比較,第1個和第2個比較.第n 2個和和第n 1個比較,每次比較中如 果前面的大於後面的就交換,這樣第一輪即n次比較後,最...