博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL:原地归并排序模板(InplaceMergeSort)
阅读量:5154 次
发布时间:2019-06-13

本文共 1728 字,大约阅读时间需要 5 分钟。

原理:就是在归并排序上改进,以时间复杂度换空间复杂度,利用元素反转完成排序

具体过程如下:

 

具体操作看代码吧,应该没什么难度,主要是reverse要反转三次

1 typedef int Position; 2  3 void Merge_Sort(Position, Position, int *const, Position *); 4 void Merge(Position, Position, int *const, Position *); 5 void Convert(Position, Position, Position, Position *); 6 void Reverse(Position, Position, Position *); 7 void Swap(Position *, Position, Position); 8  9 void Merge_Sort(Position Left, Position Right, int *const Inverse_Num, Position *A)10 {11     if (Left < Right)12     {13         Position Mid = (Left + Right) / 2;14         Merge_Sort(Left, Mid, Inverse_Num,A);15         Merge_Sort(Mid + 1, Right, Inverse_Num,A);16         Merge(Left, Right, Inverse_Num, A);17     }18 }19 20 void Merge(Position Left, Position Right, int *const Inverse_Num, Position *A)21 {22     Position Mid = (Left + Right) / 2, lpos = Left, rpos = Mid + 1, pos = Left, index = rpos;23 24     while (lpos <= Mid && rpos <= Right)25     {26         while (lpos < rpos && A[lpos] <= A[rpos])27             lpos++;28         index = rpos;29         while (rpos <= Right && A[rpos] < A[lpos])30             rpos++;31         Convert(lpos, index - 1, rpos - 1, A);32         lpos += rpos - index;33     }34 }35 36 void Convert(Position Left, Position Mid, Position Right, Position *A)37 {38     Reverse(Left, Mid, A);39     Reverse(Mid + 1, Right, A);40     Reverse(Left, Right, A);41 }42 43 void Reverse(Position Left, Position Right, Position *A)44 {45     Position i = Left, j = Right;46     while (i < j)47         Swap(A, i++, j--);48 }49 50 void Swap(Position *A, Position i, Position j)51 {52     A[i] ^= A[j];53     A[j] ^= A[i];54     A[i] ^= A[j];55 }

 参考:

转载于:https://www.cnblogs.com/Philip-Tell-Truth/p/5006910.html

你可能感兴趣的文章
onlevelwasloaded的调用时机
查看>>
求出斐波那契数组
查看>>
Vue.js 基础学习之组件通信
查看>>
lr_start_transaction/lr_end_transaction事物组合
查看>>
每天一个Linux命令 - 【chkconfig】
查看>>
△UVA10106 - Product(大数乘法)
查看>>
golang (7) 文件操作
查看>>
关于 Object.defineProperty()
查看>>
免认证的ssh登录设置
查看>>
[转] Maven 从命令行获取项目的版本号
查看>>
CodeIgniter学习笔记(四)——CI超级对象中的load装载器
查看>>
.NET CLR基本术语
查看>>
Java Development Environment in Linux: Install and Configure Oracle
查看>>
Delphi XE2 update4 很快就要来了
查看>>
Mac 关机卡住
查看>>
ssm开发随笔
查看>>
fidder使用
查看>>
circos的ubuntu和mac安装
查看>>
C - Heavy Transportation
查看>>
ubuntu的home目录下,Desktop等目录消失不见
查看>>