导航:首页 > 编程语言 > java归并排序非递归

java归并排序非递归

发布时间:2025-06-16 05:18:44

1. 给定一个数列,如何用归并排序算法把它排成升序,用c语言实现。

void MergeSort(int x[],int n) { //非递归归并排序
//元素数组为x,其长度为n
int i,j,k1,k2,l;
int *a;
for(i=1;i<=n-1;i=i*2)//i为插入排序的子段长度
{
for(j=1;j<=n-1;j=j+2*i)//j为进行插入排序的子段起始位置
{
a=(int *)malloc(2*i*sizeof(int));
l=0;k1=j;k2=j+i;
while((l<2*i)&&(k2<=n-1)&&(k2<j+2*i)&&(k1<j+i))
{//子段中,比较,移至辅助内存
if(x[k1]<x[k2])
{
a[l++]=x[k1];k1++;
}
else
{
a[l++]=x[k2];k2++;
}
}
if((k2>n-1)||(k2>=j+2*i))
{//子段的后一段超出数组范围
for(;k1<j+i;k1++)
a[l++]=x[k1];
}
else//就只有第一段就超数组了
{
if(k1>=j+i)
{
for(;(k2<j+2*i)&&(k2<=n-1);k2++)
a[l++]=x[k2];
}
}
for(k1=0;k1<l;k1++)//最后移位
{
x[j+k1]=a[k1];
}free(a);
}
}
}

非递归的归并排序,我以前写的。
中间malloc与free的话,是为了方便管理不定大小的空间,这里需要malloc.h的头文件

阅读全文

与java归并排序非递归相关的资料

热点内容
vb窗体文件如何打开 浏览:810
百度找图怎么跳转网站 浏览:284
安卓44如何隐藏文件夹 浏览:92
sr100怎么编程序 浏览:795
苹果手机怎样保存信息 浏览:379
安卓patch是什么文件 浏览:819
2003word审阅 浏览:387
手机时间查找新文件 浏览:695
数据库管理员怎么入行 浏览:852
安卓nba2k17修改能力 浏览:868
win10设置nsf文件共享 浏览:445
同一个网站怎么发文章 浏览:725
苹果翻盖手机多少钱 浏览:815
flash80金鹰教程 浏览:374
怎么把美国的app账号换成中国的 浏览:375
贷款60秒app 浏览:408
捷安特骑行app有什么奖励 浏览:542
网站图片展示代码 浏览:167
asp找回密码 浏览:836
如何知道别人使用我的电脑和看了什么文件 浏览:712

友情链接