Merge Sort bug list

在實現MergeSort過程中出現的問題這裏列一下,總結下來是對步驟沒有詳細的捋一遍,出現了邊界和個數的不對應。

在C語言中的下標和個數的對應關係,以及如果要用其他語言編寫的話要注意其中的對應的關係。

/*
208  * merge, merge two ordered subarray.
209  * p is first start-index as C, included,
210  * q is second start-index as C, included,
211  * r is the end-index of total as c, nonIncluded.
212  */
213 int mergeNonDec(int *a, int p, int q, int r)
214 {
215     int i = 0, j, k, *L=NULL, *R=NULL;
216     int n1 = q - p, n2 = r - q;  // as the first longest bug: n1 = q - p + 1;
217     if(NULL == a || p>q || p>r || q>r){
218         return ERROR;
219     }
220     L = (int *)malloc((n1+1+1)*sizeof(int));
221     if(L == NULL){
222         return ERROR;
223     }
224     R = (int *)malloc((n2+1+1)*sizeof(int));
225     if(R == NULL){
226         free(L);
227         return ERROR;
228     }
229 
230     for(i=0; i<n1; i++){
231         L[i] = a[p+i];
232     }
233     for(j=0; j<n2; j++){
234         R[j] = a[q+j];
235     }
236 
237     L[n1] = INT_MAX;
238     R[n2] = INT_MAX;
239     i = j = 0;
240     for(k=p; k < r; k++){
241         if(L[i]<R[j]){
242             a[k] = L[i];
243             i++;
244         }
245         else{
246             a[k] = R[j];
247             j++;
248         }
249     }
250 
251     free(L);
252     free(R);
253     return OK;
254 }

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