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

归并排序java非递归

发布时间:2024-10-18 10:14:02

① 简述二路归并排序,并分析其算法复杂性。

二路归并,就是将两个有序序列,合并为一个有序的序列

而排序最初是一个无序序列,此时就要将其分解为两个有序序列
这里就用到一个递归的思想
即:将该算法截为两段,对前后两段应用该算法均可得到一个有序序列,这是就有了两个有序序列,再使用该算法就最终得到一个有序序列
而递归终点是当分段内只有一个元素时,显然就是有序序列了,就可以返回

具体的代码为:
void Merge(int r[],int r1[],int s,int m,int t)//二路归并
{
int i=s,j=m+1,k = s;
while(i<=m && j<=t)
{
if (r[i] <= r[j]) r1[k++] = r[i++];
else r1[k++] = r[j++];
}
if(i <= m)
{
while(i <= m)
r1[k++] = r[i++];
}
else
{
while (j <= t)
r1[k++] = r[j++];
}
}

void MergeSort(int r[],int r1[],int s,int t)//递归调用
{
if(s == t) r1[s] = r[s];
else{
m = (s + t)/2;
MergeSort(r,r1,s,m);
MergeSort(r,r1,m+1,t);
Merge(r1,r,s,m,t);
}
}

至于它的时间复杂度,从严格分析上说是O(nlog2n),我做过测试,它在较大数据排序时,性能不亚于快排,堆排,并且和初始数据顺序性无关,是一种稳定的排序算法
至于缺点就是它的空间复杂度,达到O(n)

此外,它还有非递归算法,思想都是一样的,我就不多说了,如果你需要,可以Hi我

阅读全文

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

热点内容
htc手机查询代码 浏览:757
苹果手机激活码忘记了怎么办 浏览:360
如何查看苹果手机无线密码 浏览:651
从零开始学网站怎么学 浏览:38
qq10个g都是什么文件 浏览:453
江苏电信免费升级100m 浏览:10
哪些app买衣服买鞋 浏览:85
安卓最终幻想3隐藏人物 浏览:922
怎么将一大堆图片放进文件夹 浏览:355
net如何控制光驱刻录文件 浏览:350
未获取ukey中的数据什么意思 浏览:603
怎么样往app上冲钱 浏览:394
vb编程中声明常量的语句是什么 浏览:39
网购网站的广告怎么弄 浏览:640
word文件怎么格式化 浏览:929
js验证checkbox是否勾选 浏览:991
qq520红包病毒是真的吗 浏览:875
文件夹里的数字是什么 浏览:118
us数据线怎么连接车载音乐 浏览:320
拨号芯片程序写入 浏览:847

友情链接