2016-02-22 38 views
0
#include<iostream> 
using namespace std; 
void merge(int *lArray, int nL, int *rArray, int nR, int *Array){ 
int i,j,k; 
i=0; j=0; k=0; 
    //i,j,k are pointers for lArray, rArray & Array 
    // nL & nR are numbr of elements in lArray & rArray respectively 
while(i<nL && j<nR) 
{ 
    if(lArray[i] <= rArray[j]) 
     Array[k++] = lArray[i++]; 
    else 
     Array[k++] = rArray[j++]; 
} 
while(i<nL) 
    Array[k++] = lArray[i++]; 
while(i<nR) 
    Array[k++] = rArray[j++]; 
return; 
} 
void mergesort(int *Array, int n) 
{ 
if (n<2) 
    return; 
int mid = n/2; 
int lArray[mid]; 
int rArray[n-mid]; 
    for (int i=0;i<mid;i++) 
     lArray[i] = Array[i]; 
    for (int i=mid;i<n;i++) 
     rArray[i-mid] = Array[i]; 
mergesort(lArray, mid); 
mergesort(rArray,n-mid); 
merge(lArray,mid,rArray,n-mid,Array); 
delete(lArray); 
delete(rArray); 
} 
int main() 
{ 
int Array[10]; 
int n = 10; 
cout<< "Enter Values :" << " "; 
for(int i=0; i<10; i++) 
    cin>>Array[i]; 
mergesort(Array,n); 
for(int i=0; i<n; i++) 
    cout<<Array[i]<< " "; 
return 0; 
} 

它是一個簡單的合併排序程序,但我無法找出我出錯的地方。 運行代碼後,我能夠輸入數組的輸入,但進入mergesort函數後控制檯剛剛崩潰。 我在64位Windows 8.1上使用CodeBlocks。爲什麼在給出數組的輸入並輸入mergesort函數後出現運行時錯誤?

+0

控制檯剛剛崩潰 - 程序突然結束了嗎?沒有錯誤? – Litty

+0

請將您的代碼縮進一致,硬編碼破壞排序算法的值並提供精確的錯誤信息。 –

回答

0

我已經對mergesort函數做了一些修改。現在您的程序在控制檯上顯示輸出,但輸出未排序。我認爲有數組索引問題可能是分段錯誤。輸出中也存在邏輯錯誤。

#include<iostream> 
    using namespace std; 

    void merge(int *lArray, int nL, int *rArray, int nR, int *Array) 
    { 
    int i,j,k; 
    i=0; j=0; k=0; 
     //i,j,k are pointers for lArray, rArray & Array 
     // nL & nR are numbr of elements in lArray & rArray respectively 
    while(i<nL && j<nR) 
    { 
     if(lArray[i] <= rArray[j]) 
      Array[k++] = lArray[i++]; 
     else 
      Array[k++] = rArray[j++]; 
    } 
    while(i<nL) 
     Array[k++] = lArray[i++]; 
    while(i<nR) 
     Array[k++] = rArray[j++]; 
    return; 
    } 

    void mergesort(int *Array, int n) 
    { 
    if(n>2) 
    {  
    int mid = (n+1)/2; 
    int lArray[mid]; 
    int rArray[n-mid]; 
     for (int i=0;i<mid;i++) 
      lArray[i] = Array[i]; 
     for (int i=mid;i<n;i++) 
      rArray[i-mid] = Array[i]; 
    mergesort(lArray, mid); 
    mergesort(rArray,n-mid); 
    merge(lArray,mid,rArray,n-mid,Array); 
    delete(lArray); 
    delete(rArray); 
    } 
    } 
    int main() 
    { 
    int Array[10]; 
    int n = 10; 
    cout<< "Enter Values :" << " "; 
    for(int i=0; i<10; i++) 
     cin>>Array[i]; 

    mergesort(Array,n); 
    for(int i=0; i<10; i++) 
     cout<<Array[i]<< " "; 
    return 0; 
    } 
+0

感謝很多同學...我會看看那些錯誤... –

+0

第19行: 它應該是 而(j

相關問題