首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求帮忙,出现段异常,没搞明白那里出错了!归并算法

2012-06-02 
求帮忙,出现段错误,没搞明白那里出错了!!归并算法#include stdio.h#include stdlib.h#define N 10void

求帮忙,出现段错误,没搞明白那里出错了!!归并算法
#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趟排序,结果怎么能对呢?

热点排行