【发布时间】:2014-03-12 16:35:01
【问题描述】:
我正在尝试在计算机生成的随机数数组上打印合并排序所花费的时间,其大小应在运行时从用户处获取,但它给出了分段错误。谁能帮助纠正我的错误?
part(int arr[],int min,int max)
{
int mid;
if(min<max)
{
mid=(min+max)/2;
part(arr,min,mid);
part(arr,mid+1,max);
merge(arr,min,mid,max);
}
}
merge(int arr[],int min,int mid,int max)
{
int tmp[30];
int i,j,k,m;
j=min;
m=mid+1;
for(i=min; j<=mid && m<=max ; i++)
{
if(arr[j]<=arr[m])
{
tmp[i]=arr[j];
j++;
}
else
{
tmp[i]=arr[m];
m++;
}
}
if(j>mid)
{
for(k=m; k<=max; k++)
{
tmp[i]=arr[k];
i++;
}
}
else
{
for(k=j; k<=mid; k++)
{
tmp[i]=arr[k];
i++;
}
}
for(k=min; k<=max; k++)
arr[k]=tmp[k];
}
main(){
int x, *b, i;
double t5;
printf("array size = \t");
scanf("%d", &x);
b = (int)malloc(x*sizeof(int));
srand(time(NULL));
for(i = 0; i<x; i++) b[i] = rand();
time_t t1 = 0;
time_t t2 = 0;
t1 = time(NULL);
part(b, 0, (x-1));
t2 = time(NULL);
printf("time taken for merge sort = %f sec\n", (t1 - t2));
}
【问题讨论】:
-
确切的错误是什么?
-
为什么要将 b 转换为 int,而它应该是 int*?
-
@gregkow 更好的是,完全移除演员表。
-
我确实将 b 声明为“int *b”,但我遇到了分段错误
-
@user3248186 分段错误到底在哪里。什么行、语句等?