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

如果您發現解答中出現錯誤、對於沒有給出解答的題目你有好的答案或者解答有改進的地方,只要您覺得有問題的地方,您可以通過[email protected]和我聯繫 下面開始正題了:

2.1-1這題可以參照書上17自己給出過程,這裏就略去了。

2.1-2 先給出書上insertion-sort的C源代碼吧,然後再給出按照非升序的代碼:

課本中(非降序的)insertion-sort代碼:

 

  1. void insertion_sort(int *A, int n)  
  2. {  
  3.     int i,j;  
  4.     int key; 
  5.  
  6.     for(i = 1; i < n; i++)  
  7.     {  
  8.         j = i - 1;  
  9.         key = A[i]; 
  10.  
  11.         while(j >= 0 && A[j] > key)  
  12.         {  
  13.             A[j+1] = A[j];  
  14.             j = j - 1;  
  15.         } 
  16.  
  17.         A[j+1] = key;  
  18.     }  

 

在這題中,只要講非降序改成非升序排序,所以改後代碼如下:

 

  1. void insertion_sort(int *A, int n)  
  2. {  
  3.     int i,j;  
  4.     int key; 
  5.  
  6.     for(i = 1; i < n; i++)  
  7.     {  
  8.         j = i - 1;  
  9.         key = A[i]; 
  10.  
  11.         while(j >= 0 && A[j] < key)  
  12.         {  
  13.             A[j+1] = A[j];  
  14.             j = j - 1;  
  15.         } 
  16.  
  17.         A[j+1] = key;  
  18.     }  

 

2.1-3這題給出僞代碼:

 

  1. int find(int *A , int n, int v) 
  2.  
  3.  
  4.     int  i = 0; 
  5.  
  6.     for( ; i < n; i++) 
  7.  
  8.     { 
  9.  
  10.         if(v == A[i]) 
  11.  
  12.             return i; 
  13.  
  14.     } 
  15.  
  16.   
  17.  
  18.     return NIL; 
  19.  

 

2.1-4直接給出代碼:

 

  1. /*在A[]和B[]中,數組的最低位對應與二進制的高位,即如果一個二進制數是011100,用數組表示就是A[] = {0,1,1,1,0,0}*/ 
  2.  
  3. void add(int *A ,int *B, int *C, int n)  
  4. {  
  5.     int i, a, c = 0;  
  6.     int s;  
  7.     for(i = n - 1; i >= 0 ; i--)  
  8.     {  
  9.         s = A[i] + B[i];  
  10.          
  11.         C[i+1] = (s + c) % 2;  
  12.         c = (s + c) / 2;  
  13.     } 
  14.  
  15.     C[0] = c;  

 

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