如果你想有一個冒泡排序算法顯着最佳的變化,最差,平均情況下效率,試試這個:
int count = n - 1; // The input size
bool sFlag = true; // A flag variable allowing the inner outerloop to
break early and fall through
while (sFlag){
sFlag = false; // Set false so that the loop can break if no swaps occur
for (int j = 0; j < count; j++){
if (A[j+1] < A[j]){
int temp; // Swap the two elements
temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;
sFlag = true; // A swap has occured, iterate again
}
}
count--; //Next time, don't bother looking at the last element, it is
in order
}
這種最壞的情況是Cworst(N)= 1/2N (n + 1),最好的情況是Cbest(n)= n-1。 這是因爲count變量會根據已經完成的迭代量相對於輸入大小而使內部循環迭代次數減少。
這是我迄今爲止遇到的最有效的氣泡排序。
到目前爲止您提出了什麼? – 2013-03-06 14:50:36
非常多的聲音,你想我們爲你的作業制定一個答案 – 2013-03-06 14:50:38
氣泡排序複雜性討論是非常普遍的網絡,我沒有看到任何人都會有問題,除非它是作業。嘗試谷歌搜索「泡沫排序的複雜性」? – 2013-03-06 14:52:29