我的代碼在列印未排序的陣列后終止,并且在 ideone 上出現運行時錯誤,我無法在其中找到錯誤。代碼作業正常,直到函式中的第一個合并排序,但之后在不執行合并函式的情況下終止。我曾嘗試更改陣列大小,但到目前為止沒有任何效果。任何幫助,將不勝感激。
#include<stdio.h>
#include<math.h>
void Merge(int arr[],int,int,int,int);
void printArray(int *arr,int n)
{
for (int i = 0; i < n; i )
{
printf("%d",arr[i]);
printf(" ");
}
printf("\n");
}
void MergeSort(int arr[],int low,int high)
{
int mid;
if(low<high)
{
mid = ceil((low high)/2);
MergeSort(arr,low,mid-1);
MergeSort(arr,mid,high);
Merge(arr,low,mid-1,mid,high);
}
}
void Merge(int arr[],int low,int mid1,int mid2, int high)
{
int i,c,j;
c = low;
i = low;
j = mid2;
int Temp[high-low 1];
while(i <= mid1 && j<= high)
{
if(arr[i]<arr[j])
{
Temp[c] = arr[i];
i ;
c ;
}
else
{
Temp[c] = arr[j];
j ;
c ;
}
}
while(i<=mid1)
{
Temp[c] = arr[i];
i ;
c ;
}
while(j<=high)
{
Temp[c] = arr[j];
j ;
c ;
}
for(int k=0;k<=high;k )
{
arr[k] = Temp[k];
}
}
int main(void)
{
int arr[] = {3,5,2,13,12,3,2,13,45};
int n = sizeof(arr)/sizeof(arr[0]);
printf("unsorted array: \n");
printArray(arr,n);
MergeSort(arr,0,n-1);
printf("sorted array: \n");
printArray(arr,n);
return 0;
}
uj5u.com熱心網友回復:
有幾個問題:
ceil是不是有用,因為/將執行一個整數除法等已經四舍五入下來- 與此相關的,你不應該使用
mid-1,并mid作為引數在接下來的遞回呼叫,但mid和mid 1。對 的引數也應如此Merge。 - 您訪問的方式
Temp是錯誤的。您分配從0到條目high-low,但開始的價值您的訪問c是low。您應該從索引 0 開始。 - 在最后一個回圈中
k,從 0 到high,但迭代次數太多了。它應該從 開始low,然后Temp應該再次使用k-low作為索引來調整對索引的訪問。
這是更正后的代碼:
void MergeSort(int arr[],int low,int high)
{
int mid;
if(low<high)
{
mid = (low high)/2; // <--
MergeSort(arr,low,mid); // <--
MergeSort(arr,mid 1,high); // <--
Merge(arr,low,mid,mid 1,high); // <--
}
}
void Merge(int arr[],int low,int mid1,int mid2, int high)
{
int i,c,j;
c = 0; // <--
i = low;
j = mid2;
int Temp[high-low 1];
while(i <= mid1 && j<= high)
{
if(arr[i]<arr[j])
{
Temp[c] = arr[i];
i ;
c ;
}
else
{
Temp[c] = arr[j];
j ;
c ;
}
}
while(i<=mid1)
{
Temp[c] = arr[i];
i ;
c ;
}
while(j<=high)
{
Temp[c] = arr[j];
j ;
c ;
}
for(int k=low;k<=high;k ) // <--
{
arr[k] = Temp[k-low]; // <--
}
}
重要提示:我為您除錯了代碼,但這是您可以自己做的事情。在使用除錯器逐步執行代碼時檢查變數,并找出意外的地方。這需要一些時間,但這是編碼人員需要學習的技能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334944.html
