排序——归并排序技术
归并排序的思想是将几个相邻的有序表合并成一个总的有序表,下面主要讨论二路归并排序。
1、两个有序表的合并
二路归并排序的基本操作是将两个相邻的有序表合并为一个有序表。下面是将两个顺序存储的有序表合并为一个有序表的算法:
设两个有限子表R[s]……R[m]和R[m+1]……R[t],将两个有序子表合并为一个有序表R1[s]……R1[t]。合并算法如下:
要注意:该合并算法要求两个有限子表是相邻的,即R[s]……R[m]和R[m+1]……R[t]。
2、二路归并排序的迭代算法
二路归并的基本思想是:只有一个元素的表总是有序的,所以将排序表R[1……n],看做是n个长度为len=1的有序子表,对相邻的两个有序子表两两合并到R1[1……n],使之生成表长len=2的有序表;再进行两两合并到R[1……n]中,……,直到最后生成表长len=n的有序表。
每趟排序中首先要解决分组的问题,设本趟排序中从R[1]开始,长度为len的子表有序,因为表长n未必是2的整数幂,这样最后一组就不能保证恰好是表长为len的有序表也不能保证每趟归并时都有偶数个有序子表,这些都要在一趟排序中考虑到。
例:有排序表36 20 18 10 60 25 30 18 12 56,归并排序过程如下图示:
一趟归并算法:
二路归并排序:
3、二路归并排序的递归算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?