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 减少其基本操作运行次数