版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
归并排序归并排序归并排序“归并”的含义是将两个或两个以上的有序表合并成一个新的有序表。归并排序“归并”的含义是将两个或两个以上的有序表合并成一个新利用归并的思想实现排序假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到⌈n/2⌉个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。利用归并的思想实现排序假设初始序列含有n个记录,则可看成是n例题初始关键字:[49][38][65][97][76][13][27]一趟归并后:[3849][6597][1376][27]二趟归并后:[38496597][132776]三趟归并后:[13273849657697]例题初始关键字:[49][38][65][97]算法思想2-路归并排序将R[low..high]中的记录归并排序后放入T[low..high]中。当序列长度等于1时,递归结束,否则:(1)将当前序列一分为二,求出分裂点mid=⌊(low+high)/2⌋;(2)对子序列R[low..mid]递归,进行归并排序,结果放入S[low..mid]中;算法思想2-路归并排序将R[low..high]中的记录归并算法思想(3)对子序列R[mid+1..high]递归,进行归并排序,结果放入S[mid+1..high]中;(4)调用算法Merge,将有序的两个子序列S[low..mid]和S[mid+1..high]归并为一个有序的序列T[low..high]。算法思想(3)对子序列R[mid+1..high]递归,进行算法描述voidMsort(RedTypeR[],RedType&T[],ints,intt){
//将R[s..t]归并排序为T[s..t]if(s==t)T[s]=R[s];else{m=(s+t)/2;//将R[s..t]平分为R[s..m]和R[m+1..t]Msort(R,TR2,s,m);//递归地将R[s..m]归并为有序的TR2[s..m]
Msort(R,TR2,m+1,t);//递归地R[m+1..t]归并为有序的TR2[m+1..t]Merge(TR2,T,s,m,t);}//将TR2[s..m]和TR2[m+1..t]归并到T[s..t]
}//Msort
算法描述voidMsort(RedTypeR[],算法描述
voidMergeSort(SqList&L){//对顺序表L作2-路归并排序
MSort(L.r,L.r,1,L.length);}//MergeSort算法描述
将两个有序表归并为一个新的有序表的算法
voidMerge(RedTypeR[],RedType&T[],inti,intm,intn){
//将有序的记录序列R[i..m]和R[m+1..n]归并为有序的记录序列T[i..n]
intj,k;for(j=m+1,k=i;i<=m&&j<=n;++k){//将SR中记录由小到大地并入TRifLQ(SR[i].key,SR[j].key)TR[k]=SR[i++];elseTR[k]=SR[j++];}if(i<=m)//TR[k..n]=SR[i..m];将剩余的SR[i..m]复制到TRwhile(k<=n&&i<=m)TR[k++]=SR[i++];if(j<=n)//将剩余的SR[j..n]复制到TRwhile(k<=n&&j<=n)TR[k++]=SR[j++];}//Merge将两个有序表归并为一个新的有序表的算法
voidMerge例题52,23,80,36,68,14(s=1,t=6)[52,23,80][36,68,14][52,23][80][52][23,52][23,52,80][36,68][14][36][68][36,68][14,36,68][14,23,36,52,68,80][23]例题52,23,80,36,68,算法的效率时间复杂度方面,由于每趟归并的时间复杂度O(n),而对于有n个记录的序列来说,一共需要进行⌈log2n⌉趟归并。因此归并排序的时间复杂度是O(nlog2n)。空间复杂度方面,用顺序表实现归并排序时,需要和待排序记录个数相等的辅助存储空间,所以空间复杂度为O(n)。算法的效率时间复杂度方面,由于每趟归并的时间复杂度O(n),总结归并排序很显然是一种稳定的排序方法。它也可用于链式存储结构存储的记录序列,并且不需要辅助的记录存储空间,但递归实现时仍然需要开辟相应的递归工作栈。总结归并排序很显然是一种稳定的排序方法。归并排序归并排序归并排序“归并”的含义是将两个或两个以上的有序表合并成一个新的有序表。归并排序“归并”的含义是将两个或两个以上的有序表合并成一个新利用归并的思想实现排序假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到⌈n/2⌉个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。利用归并的思想实现排序假设初始序列含有n个记录,则可看成是n例题初始关键字:[49][38][65][97][76][13][27]一趟归并后:[3849][6597][1376][27]二趟归并后:[38496597][132776]三趟归并后:[13273849657697]例题初始关键字:[49][38][65][97]算法思想2-路归并排序将R[low..high]中的记录归并排序后放入T[low..high]中。当序列长度等于1时,递归结束,否则:(1)将当前序列一分为二,求出分裂点mid=⌊(low+high)/2⌋;(2)对子序列R[low..mid]递归,进行归并排序,结果放入S[low..mid]中;算法思想2-路归并排序将R[low..high]中的记录归并算法思想(3)对子序列R[mid+1..high]递归,进行归并排序,结果放入S[mid+1..high]中;(4)调用算法Merge,将有序的两个子序列S[low..mid]和S[mid+1..high]归并为一个有序的序列T[low..high]。算法思想(3)对子序列R[mid+1..high]递归,进行算法描述voidMsort(RedTypeR[],RedType&T[],ints,intt){
//将R[s..t]归并排序为T[s..t]if(s==t)T[s]=R[s];else{m=(s+t)/2;//将R[s..t]平分为R[s..m]和R[m+1..t]Msort(R,TR2,s,m);//递归地将R[s..m]归并为有序的TR2[s..m]
Msort(R,TR2,m+1,t);//递归地R[m+1..t]归并为有序的TR2[m+1..t]Merge(TR2,T,s,m,t);}//将TR2[s..m]和TR2[m+1..t]归并到T[s..t]
}//Msort
算法描述voidMsort(RedTypeR[],算法描述
voidMergeSort(SqList&L){//对顺序表L作2-路归并排序
MSort(L.r,L.r,1,L.length);}//MergeSort算法描述
将两个有序表归并为一个新的有序表的算法
voidMerge(RedTypeR[],RedType&T[],inti,intm,intn){
//将有序的记录序列R[i..m]和R[m+1..n]归并为有序的记录序列T[i..n]
intj,k;for(j=m+1,k=i;i<=m&&j<=n;++k){//将SR中记录由小到大地并入TRifLQ(SR[i].key,SR[j].key)TR[k]=SR[i++];elseTR[k]=SR[j++];}if(i<=m)//TR[k..n]=SR[i..m];将剩余的SR[i..m]复制到TRwhile(k<=n&&i<=m)TR[k++]=SR[i++];if(j<=n)//将剩余的SR[j..n]复制到TRwhile(k<=n&&j<=n)TR[k++]=SR[j++];}//Merge将两个有序表归并为一个新的有序表的算法
voidMerge例题52,23,80,36,68,14(s=1,t=6)[52,23,80][36,68,14][52,23][80][52][23,52][23,52,80][36,68][14][36][68][36,68][14,36,68][14,23,36,52,68,80][23]例题52,23,80,36,68,算法的效率时间复杂度方面,由于每趟归并的时间复杂度O(n),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年海南省安全员知识题库
- 2025年贵州省安全员C证考试(专职安全员)题库附答案
- 中医内科学-瘿病
- 【大学课件】建筑设备工程
- 声音的产生与传播+flash课件
- 语文课件-画蛇添足
- 三年级语文《炮手》课件
- 建设工程安全生产管理课件
- 万科穿插施工与施工计划
- 《急腹症幻灯》课件
- 2024年新技术、新产品、新工艺、新材料的应用培训课件
- 2025新年春节专用对联蛇年春联带横批
- 2025年中联重科公司发展战略和经营计划
- Unit8 Chinese New Year 第一课时(说课稿)-2024-2025学年译林版(三起)英语六年级上册
- JGJT46-2024《施工现场临时用电安全技术标准》条文解读
- 半结构化面试题100题
- 服装厂班组长培训
- 广东省公立医疗机构基本医疗服务价格项目修订表
- 申论公务员考试试题与参考答案
- 《激光原理及应用》全套课件
- 北京市海淀区2023-2024学年高三上学期期末考试+历史 含答案
评论
0/150
提交评论