归并排序

1|0今天的瑞士轮然后看到了标签上的归并排序根本没学过好吧于是就学习了一下

2|0归并分为两个步揍

2|11.利用递归分治出两个长度为一的理论上有序数列

将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。

void mergesort(int a[], int l, int r, int ans[]) { if (l < r) { int mid = (l + r) / 2; mergesort(a, l, mid, ans); //左边有序 mergesort(a, mid + 1, r, ans); //右边有序 mergearray(a, l, mid, r, ans); //再将二个有序数列合并 } }

2|22.将二个有序数列合并

这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。

//将有二个有序数列a[first...mid]和a[mid...last]合并。 void mergearray(int a[], int first, int mid, int last, int ans[]) { int i=l,j=mid+1,k=l,n=mid,m=r; while(i<=n&&j<=m){ if(a[i]<=a[j]){ ans[k++]=a[i++]; }else{ ans[k++]=a[j++]; } } while(i<=n){ ans[k++]=a[i++]; } while(j<=m){ ans[k++]=a[j++]; } for(int i=l;i<=r;i++){ a[i]=ans[i]; } }

3|0然后就大功告成啦


__EOF__

本文作者Kdlyh
本文链接https://www.cnblogs.com/kdlyh/p/17777009.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   加固文明幻景  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示