归并排序
2015-09-06 02:23
288 查看
采用的 [ 闭合区间 ],
折半,无外呼,总元素是
====
奇数最后分成
========
单1元素, 跟2元素;
====
偶数最后分成
========
单1元素.
于是乎,如果,闭合 [ L < R ]
====
则有俩元素(循环)以上则继续折半;
于是乎,
折半,无外呼,总元素是
====
奇数最后分成
========
单1元素, 跟2元素;
====
偶数最后分成
========
单1元素.
于是乎,如果,闭合 [ L < R ]
====
则有俩元素(循环)以上则继续折半;
于是乎,
归并函数
void Merge(int A[], int TemArray[], int Lpos, int Rpos, int Rend) {/*----------(原数组,临时副本,左开头Lpos,右开头Rpos,右结束Rend)---------*/ int Lend = Rpos - 1, Tempos = Lpos, ArrayNums = Rend - Lpos + 1; while (Lpos <= Lend&&Rpos <= Rend) if (A[Lpos] <= A[Rpos]) TemArray[Tempos++] = A[Lpos++]; else TemArray[Tempos++] = A[Rpos++]; while (Lpos <= Lend) TemArray[Tempos++] = A[Lpos++]; while (Rpos <= Rend) TemArray[Tempos++] = A[Rpos++]; for (int i = 0; i < ArrayNums; i++, Rend--) A[Rend] = TemArray[Rend]; }
折半函数
<pre name="code" class="cpp">void getMSort(int A[], int TemArray[], int L, int R){ int Center; if (L < R){ Center = (L + R) >> 1; getMSort(A, TemArray, L, Center); getMSort(A, TemArray, Center + 1, R); Merge(A, TemArray, L, Center + 1, R); } }
复制副本函数
void MergeSort(int A[], int N){ int *TemArray = new int ; if (TemArray){ getMSort(A, TemArray, 0, N - 1); delete[]TemArray; } else{ cout << "new TemArray Error!"; exit(1); } }
主main
#define ARRAYSIZE sizeof(iarray)/sizeof(iarray[0])
int main() { int iarray[] = { 432, 373, -312, 906, 949, -220, 379, 723, 91, 394, -568, -776, -639, 462, 382, -385, 124, 338, 578, -580, -496, 629, -531, 985, -798, -372, -462, 423, 403, -565, -227, 758, -665, 723, 734, 458, -495, -445, 696, -334, -894, -158, -699, 55, -422, 342, -921, 77, 831, -927, -549, 589, 512, 17, 600, 634, 164, 479, 158, -775, 496, 321, -847, 575, 487, -704, 175, 293, 510, 516, -749, -484, -855, 881, -424, 121, 50, -613, 701, 988, 727, 388, 466, 626, 910, -229, 727, -454, 912, -26, 695, -667, 971, 451, -188, -251, -809, 508, 432, -148 }; MergeSort(iarray, ARRAYSIZE); for (int i = 0; i != ARRAYSIZE; i++){ if (i % 10 == 0)cout << "\n"; cout << iarray[i] << ","; } return getchar(); }
相关文章推荐
- ubuntu redis安装
- [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
- 《Java核心技术卷二》笔记(三)正则表达式
- prlink elf format
- POJ 3518 Prime Gap题意好难理解
- iOS网络--网络HTTP
- Linux基础--系统启动中grub功能
- Ubuntu 14.04数据库服务器--mysql的安装和配置
- ubuntu安装phpmyadmin
- 三阶贝塞尔曲线一分为二的一般公式
- Qt on Android: Hello World!
- Unity Game Programming AI(4)壁障运动
- log4j配置详解
- bzoj 2301 莫比乌斯反演
- 关于ROS学习的一些反思
- 关于ROS学习的一些反思
- Unity Manual之Physics.Raycast射线投射
- linux磁盘管理与文件 系统
- 算法题:数组中只出现一次的两个数字
- BestCoder Round #54 (div.2) HDOJ 5429 Geometric Progression(模拟)