課本P16關於冒泡排序:
void bubble_sort(int a[ ], int n){
//將a中整數序列重新排序成自小至大有序的整數序列
for(i = n - 1, change = TRUE; i > 1 && change; --i){ //應爲i > 0
change = FALSE;
for(j = 0; j < i; ++j)
if(a[j] < a[j + 1]){ a[j] 互換 a[j + 1]; change = TRUE }
}
}//bubble_sort
我是在計算語句頻度的時候發現的:
2 + 3 + 4 +..... + (n-1) = (n+1)(n-2)/2,與課本結果不一致
上機測試(注意:測試數組中的數爲逆序),結果:第一個數比第二個數大
應該改爲i > 0:
1 + 2 + 3 +.....+ (n-1),利用等差數列公式計算後得到:n(n-1)/2
(在 1 + 2 + 3 + .....+ (n-1)最前面加0便於利用公式計算)
附:時間複雜度的計算方法:
for(i = 0 ; i < n; i++)
for(j = 0; j < n; j++)
x++;
基本操作爲:x++;它執行的次數(語句頻度)爲:n個n相加的和,即n + n + .... + n = n*n
後記:有錯誤這本書是97年印刷的藍皮本的,05年印刷的版本已經更正爲:i >= 1