归并排序
来源:互联网 发布:十二生肖 知乎 编辑:程序博客网 时间:2024/06/06 05:48
归并排序是一种高效并且稳定的排序,即不会打乱数据原来的规律。算法的思路:1.先把数组递归分解为两部分;2.将两部分分别排序;3.最后将排好序的两部分合并在一起第三步,相比前两步要麻烦一些,方法是每次只需要把两个序列的最小元素相比较,删除其中的较小元素并加入合并后的新表即可。
#include <iostream>#include <algorithm>#define ML 1000using namespace std;void Merge_Sort(int *A, int l, int r, int *T) //归并排序,A为需要排序的数组,T为一个附加数组,用于存放每次归并的结果{ if (r - l > 1) { int m = l + (r - l) / 2; //划分为两部分 int p = l, q = m, i = l; Merge_Sort(A, l, m, T); //递归求解 Merge_Sort(A, m, r, T); while (p < m || q < r) { if (q >= r || (p < m&&A[p] <= A[q])) //从小到大排序 { T[i] = A[p]; //从划分的左半数组复制到临时空间T i++; p++; } else { T[i] = A[q]; //从右半数组复制到临时空间 i++; q++; } } for (i = l; i < r; i++) { A[i] = T[i]; //从辅助空间T复制回A数组 } }}int main(int argc, char *argv[]){ int n; while (cin >> n) { int num[ML] = { 0 }, T[ML] = { 0 }; for (int i = 0; i < n; i++) { cin >> num[i]; } Merge_Sort(num, 0, n, T); for (int i = 0; i < n; i++) { cout << num[i] << ' '; } } return 0;}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- C++栈的顺序存储和链式存储的实现
- 小说题目和章节题目还没想好
- AS400 Trigger
- Python内置的字符串处理函数
- Java练习题(二)
- 归并排序
- ArtTemplate的简单介绍
- iOS设计模式之单例
- Stringbuffer 关于逗号的使用
- chromium:LoadUrl之后会发生那些事情之GraphicsLayer创建
- sphinx 增量索引
- Codeforces Round #311 (Div. 2) C. Arthur and Table
- Sqlserver导入数据
- Java多线程(二)、线程的生命周期和状态控制