2015-09-22 105 views
0

我實際上正在進行賦值,並在合併排序上發現了一個聯機代碼並對其進行了編輯,但它給出了邏輯錯誤,答案(排序陣列)沒有顯示,而是僅顯示第一個2號碼正確(有時),我無法修復它,如果你可以檢查我的代碼並給我一些想法。合併排序邏輯錯誤

#include<stdio.h> 

int arr[20];  // array to be sorted 

int main() 
{ 

    int n,i; 
    clrscr(); 
    printf("Enter the size of array\n"); // input the elements 
    scanf("%d",&n); 
    printf("Enter the elements:"); 
    for(i=0; i<n; i++) 
    scanf("%d",&arr[i]); 

    merge_sort(arr,0,n-1); // sort the array 

    printf("Sorted array:"); // print sorted array 
    for(i=0; i<n; i++) 
    printf("%d",arr[i]); 
    getch(); 
    return 0; 
} 

int merge_sort(int arr[],int low,int high) 
{ 
    int mid; int i; 
    if(low<high) { 

    mid=(low+high)/2; 
    // Divide and Conquer 
    merge_sort(arr,low,mid); 
    merge_sort(arr,mid+1,high); 
    // Combine 


    merge(arr,low,mid,high); 
    } 

    return 0; 
} 

int merge(int arr[],int l,int m,int h) 
{ 
    int arr1[10],arr2[10]; // Two temporary arrays to 
    //hold the two arrays to be merged 
    int n1,n2,i,j,k,z; 

    i=0,j=0; 

    for(z=l;z<=m;z++) 
    { 
     arr1[i]=arr[z]; 
     i++; 
    } 
    for(z=m+1;z<=h;z++) 
    { 
     arr2[j]=arr[z]; 
     j++; 
    } 




    n1=i; 
    n2=j; 
    i=0; 
    j=0; 
    for(k=l; k<=h; k++) 
    { //process of combining two sorted arrays 

    if(i<n1 && j<n2) 
    { 
    if(arr1[i]<=arr2[j]) 
    { 
      arr[k]=arr1[i++]; 
      } 
    else 
     arr[k]=arr2[j++]; 
    } 
    else if(i>=n1) 
    { 
     arr[k]=arr[j++]; 
    } 
    else 
    { 
    arr[k]=arr[i++]; 
    } 


    } 

    return 0; 
} 

回答

2

錯誤部分

 else if(i>=n1) 
    { 
     arr[k]=arr[j++]; 
    } 
    else 
    { 
    arr[k]=arr[i++]; 
    } 

修正(使用arr1arr2代替arr作爲分配的源)

 else if(i>=n1) 
    { 
     arr[k]=arr2[j++]; 
    } 
    else 
    { 
    arr[k]=arr1[i++]; 
    } 
+0

這工作,謝謝你,這樣的低級錯誤可能只是更糟糕的是:p –