【归并排序】算法实现
【归并排序】算法实现
i:开始合并时第一个序列的起始位置;
s:合并前序列的大小;
t:合并后序列的大小
i、i+s-1、i+t-1定义被合并的两个序列的边界。
代码实现
1 //应用上篇随笔的合并算法,实现数组排序
2 /********************************************************************/
3 /************************【归并排序算法】******************************/
4 /********************************************************************/
5 void sort_merge(int array[],int size)
6 {
7 int i;//开始合并时的第一个序列的起始位置
8 int s;//合并前序列的大小
9 int t = 1;//合并后序列的大小
10
11 while(t<size)
12 {
13 i=0;
14 s=t;
15 t=2*s;
16 while((i+t)<size)
17 {
18 merge(array,i,i+s-1,i+t-1,t);//见 上篇随笔中的合并两个子顺序数组算法
19 i=i+t;
20 }
21 if(i+s<size)
22 {
23 merge(array,i,i+s-1,size-1,size-i);
24 }
25 }
2 /********************************************************************/
3 /************************【归并排序算法】******************************/
4 /********************************************************************/
5 void sort_merge(int array[],int size)
6 {
7 int i;//开始合并时的第一个序列的起始位置
8 int s;//合并前序列的大小
9 int t = 1;//合并后序列的大小
10
11 while(t<size)
12 {
13 i=0;
14 s=t;
15 t=2*s;
16 while((i+t)<size)
17 {
18 merge(array,i,i+s-1,i+t-1,t);//见 上篇随笔中的合并两个子顺序数组算法
19 i=i+t;
20 }
21 if(i+s<size)
22 {
23 merge(array,i,i+s-1,size-1,size-i);
24 }
25 }
运行结果:
算法的时间复杂度为:O(nlogn);
空间复杂度为:O(n);
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步