归并排序
来源:互联网 发布:securecrt mac 破解 编辑:程序博客网 时间:2024/06/06 02:55
2路归并排序
归并排序的思想很容易,假设初始序列含有n个记录,则可看成是n个有序的序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列,再两两归并,直至得到一个长度为n的有序序列为止。,这种方法称为2路归并排序。
其算法代码如下
void Merge(RcdType SR[],RcdType &TR[],int I,int m,int n){ for(j=m+1,k=i;i<=m&&j<=n;++k){ if(LQ(SR[i).key,SR[j].key)) TR[k] = SR[i++]; else TR[k] = SR[j++]; } if(j<=m) TR[k..n] = SR[i..m]; if(j<=n) TR[k..n] = SR[j..n];}void MSort(RcdType SR[],RcdType &TR1[],int s,int t){ if(s==t) TR1[s] = SR[s]; else{ m = (s+t)/2; MSort(SR,TR2,s,m); MSort(SR,TR2,m+1,t); Merge(TR2,TR1,s,m,t); }}void MergeSort(SqList &L){ MSort(L.r,L.r,1,L.length);}
一趟归并排序的操作是,调用n/2h次算法merge将SR[1..n]中前后相邻且长度为h的有序段进行两两归并,得到前后相邻,长度为2h的有序段,并存放在TR[1..n]中,整个归并排序需进行logn趟,所以归并排序的时间复杂度为O(nlogn)
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- i2c设备驱动框架模型实例
- AngularJS系列——扩展模块-动画、表单验证、路由
- kubernetes DaemonSet资源对象
- 一个简单自定义控件以及.9patch图片的使用
- 51nod 1007 正整数分组【01背包】
- 归并排序
- 简单使用ImageLoader
- C++11 新标准(五)
- Android数据安全之URLEncoder编码
- 。。
- 求素数(质数)算法
- ip用int类型存储
- chmod命令详细用法
- bzoj 1088: [SCOI2005]扫雷Mine (枚举+判定)