读书人

求帮忙出现段异常没搞明白那里出错

发布时间: 2012-06-02 14:16:14 作者: rapoo

求帮忙,出现段错误,没搞明白那里出错了!!归并算法
#include <stdio.h>
#include <stdlib.h>
#define N 10
void init(int a[],int n)
{
int i;
for(i=0;i<n;i++)
a[i]=rand();

}
void input(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d\n",a[i]);
}
void Merger_sort(int a[],int n)
{
int i;
int low=0,value=(n/2),high=(n-1);
int begin1,end1,begin2,end2;
int *temp=(int*)malloc(sizeof(int)*n);
int k=0;
begin1=low;
end1=value;
begin2=value+1;
end2=high;
while((begin1<=end1)&&(begin2<=end2))
{
if(a[begin1]<a[begin2])
{
temp[k]=a[begin1];
begin1++;
}
else
{
temp[k]=a[begin2];
begin2++;
}
k++;
}
while(begin1<=end1)
{
temp[k++]=a[begin1];
}
while(begin2<=end2)
{
temp[k++]=a[begin2];
}
for(i=0;i<n;i++)
{
a[low+i]=temp[i];
free(temp);
}
}
int main()
{
int a[N];
init(a,N);
Merger_sort(a,N);
input(a,N);
return 0;
}


[解决办法]
完全的归并排序,对于一个长度n的序列,需要log2(n)趟排序,
第1趟完成后,变为n/2个长度为2的有序序列。
第2趟完成后,变为n/4个长度为4的有序序列。
第log2(n)趟完成后,变为1个长度为n的有序序列。


你只做了1趟排序,结果怎么能对呢?

读书人网 >C语言

热点推荐