若記錄序列的初始狀態為「正序」,則氣泡排序過程只需進行一趟排序,在排序過程中只需進行n-1次比較,且不移動記錄;反之,若記錄序列的初始狀態為「逆序」,則需進行n(n-1)/2次比較和記錄移動。因此氣泡排序總的時間複雜度為o(n*n)。
下面我們編寫乙個測試程式,隨機生成1000組每組為10個元素的陣列,對其採用氣泡排序演算法和改進的氣泡排序演算法分別進行排序。最後我們看一下兩種演算法之間的差距。測試程式的源**如下:
using system;
class program
//將包含測試資料的一維陣列作為二維陣列的元素
arr2[i] = arr;
}//另外儲存乙份相同的測試資料,用於測試改進的氣泡排序演算法效率
int improvedarr2 = new int[1000];
for (int i = 0; i < arr2.length; i++)
//針對二維陣列的每個一維陣列元素進行氣泡排序,也就是說測試氣泡排序1000次
for (int h = 0; h < arr2.length; h++)
} //記錄每一輪排序
bubblesortcount++;}}
console.writeline("對1000個長度為10的隨機數組使用【氣泡排序演算法】排序總次數:/t" + bubblesortcount);
//針對二維陣列的每個一維陣列元素進行【改進的氣泡排序】,也就是說測試【改進的氣泡排序】1000次
bool flag = true;
for (int h = 0; h < improvedarr2.length; h++)
}improvedbubblesortcount++;
if (flag)
break;}}
console.writeline("對1000個長度為10的隨機數組使用【改進的氣泡排序演算法】排序總次數:/t" + improvedbubblesortcount);
}執行結果:
對1000個長度為10的隨機數組使用【氣泡排序演算法】排序總次數: 9000
對1000個長度為10的隨機數組使用【改進的氣泡排序演算法】排序總次數: 7368
請按任意鍵繼續. . .
9 氣泡排序 效能改進
通過監測每趟比對是否發生過交換,可以提前確定排序是否完成 如果某趟比對沒有發生任何交換,說明列表已經排好序,可以提前結束演算法 def shortbubblesort alist exchanges true passnum len alist 1 while passnum 0 and excha...
改進的氣泡排序
改進的氣泡排序 按照公升序的方式對陣列進行排序,此處我們通過新增標記位,對陣列中已經有序的序列不再排序,加快了排序的速度 author iamwiam public class bubble public static void main string args bubblesort a for i...
雙向氣泡排序(氣泡排序的改進優化)
思想 雙向氣泡排序 首先從前往後兩個兩個比較把大的數移到最後乙個位置,然後從後往前兩個兩個比較把小 的的數後往前推到陣列第乙個位置,這一過程就是第一輪這個時候第乙個位置就是陣列的 最小值,最後乙個位置就是陣列的最大值了然後把front behind 在front與 behind之間再重複操作上述過程...