算法導論第二版習題試解-第二章練習2.2

2.2-1  n^3, 那個符號在windows live writer打不出來。。

2.2-2 首先給出這個算法的C代碼實現:

  1. void selection_sort(int *A, int n)  
  2. {  
  3.     int i = 0;  
  4.     int j;  
  5.     int min_index; 
  6.  
  7.     while(i < n)  
  8.     {  
  9.         min_index = i;  
  10.         j = i + 1;  
  11.          
  12.         while(j < n)  
  13.         {  
  14.             if(A[min_index] > A[j])  
  15.             {  
  16.                 min_index = j;  
  17.             }  
  18.             j++;  
  19.         } 
  20.  
  21.         if(min_index != i)  
  22.         {  
  23.             A[min_index] = A[min_index] + A[i];  
  24.             A[i] = A[min_index] - A[i];  
  25.             A[min_index] = A[min_index] - A[i];  
  26.         }  
  27.         i++;  
  28.     } 
  29.  

 

循環不變式大家可以參照課本給出,對於爲什麼只運行到前n-1個元素上運行是因爲算法每次都把第i小的元素放置到數組的正確位置,所以,當n-1的元素的位置都放置正確了,則最後的元素自動放置到了正確的位置。最佳運行時間和最壞運行時間都是 n^3,那個符號打不出來。。

 

2.2-3 對於查找不成功的情況,每次都要查找n個元素,對於查找成功的情況,平均是n/2。線性查找的平均情況和最壞情況都是(n),同樣那個漸進確界的符號打不出來。。

2.2-4 減少其基本操作運行次數

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