氣泡排序和改進的氣泡排序的效能差距

2021-04-19 05:18:55 字數 1116 閱讀 2454

若記錄序列的初始狀態為「正序」,則氣泡排序過程只需進行一趟排序,在排序過程中只需進行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之間再重複操作上述過程...