數據結構(第二版,C語言版)嚴蔚敏編著 第一章緒論中的錯誤

課本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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章