0
# include <stdio.h>
# include <stdlib.h>
void mergesort(int array[],int i,int j);
void merge(int a[],int i,int j);
int main(int argc,char *argv[])
{
int array[] ={7,5,4,3,2,1};
mergesort(array,0,5);
for (int i = 0; i < 6; ++i)
{
printf("%d ",array[i]);
}
return EXIT_SUCCESS;
}
void mergesort(int array[],int i,int j)
{
int middle;
if (i == j)
{
return;
}
else
{
middle = (i+j)/2;
mergesort(array,i,middle);
mergesort(array,middle+1,j);
merge(array,i,j);
}
}
void merge(int array[],int i,int j)
{
int b[100] = {0};
int forb = 0;
int INIi = i;
int middle = (i+j)/2;
int k = middle+1;
//MAKING TEMP ARRAY B
while((i<= middle) && (k <= j))
{
if (array[i] <= array[k])
{
b[forb++] = array[i++];
}
else if(array[i] > array[k])
{
b[forb++] = array[k++];
}
}
if (i>middle)
{
for(;k<=j;)
{
b[forb++] = array[k++];
}
}
else if (k>j)
{
for(;i<=middle;)
{
b[forb++] = array[i++];
}
}
//COPYING BACK TO A
for(;INIi<= j;INIi++)
{
array[INIi] = b[INIi];
}
}
問題是我只得到一半排序的數組不完整,我認爲代碼是好的,不知道什麼是錯誤的。合併功能正確放置仍然問題仍然存在。 當我用筆和紙的代碼應該工作,但不工作。謝謝你的幫助。Mergersort在C輸出
使用調試器逐行瀏覽代碼,查看真正發生的情況。 –
這是一個調試代碼的問題,它不可能幫助任何未來的訪問者。 – karlphillip
你可以請幫忙,我不知道用C調試器呢。 – user2688772