【发布时间】:2013-02-06 14:39:40
【问题描述】:
#include<stdio.h>
#include<conio.h>
//#include<alloc.h>
int* mergeSort(int*,int);
int* merge(int*,int*,int);
void main()
{
int n;int i=0;
int *a,*b;
scanf("%d",&n);
a=(int)malloc(n*sizeof(int));
for(;i<n;i++)
scanf("%d",&a[i]);
b=mergeSort(a,n);
for(i=0;i<n;i++)
printf("%d ",b[i]);
}
int* mergeSort(int *b,int n)
{
int temp,*s;
if(n>2)
{
mergeSort(b,n/2);
mergeSort(b+n/2,n-n/2);
s=merge(b,b+n/2,n);
return s;
}
else if(n==2)
{
if(b[0]>b[1])
{
temp=b[0];
b[0]=b[1];
b[1]=temp;
}
return;
}
}
int* merge(int* a,int* c,int n)
{
int i=0,j=0,k=0,
int* x;
while( (j ! =n/2) && (k != (n-n/2)) && (i < n))
{
if(a[j]<c[k])
{
x[i]=a[j];
j++;
i++;
}
else
{
x[i]=c[k];
k++;
i++;
}
}
for( ; j<n/2; j++,i++)
x[i]=a[j];
for( ; k < (n-n/2); k++,i++)
x[i]=c[k];
return x;
}
当我运行此代码时,它在第一个 for 循环中输入数组的所有元素后挂起。请帮助我,我该如何纠正它以使其成功运行?它挂起从 main() 函数调用 mergeSort 函数。
【问题讨论】:
-
@Shark 过时的 DOS 标头。
-
这是相当可怕的代码。作为旁注,请don't cast the return value of
malloc()in C。 -
调试调试调试调试!
-
conio.h => 控制台输入/输出
-
1)
mergeSort()函数具有不返回值的代码路径。 2)merge()函数使用未初始化的指针 (int *x)。可能还有其他问题,但我不再查找了。