归并排序
来源:互联网 发布:java web入门书籍推荐 编辑:程序博客网 时间:2024/06/16 08:28
#include <iostream>#include <algorithm>#include <vector>using namespace std;/* *归并排序 *思想:将待排数组多次二分为单个数(递归),再回溯合并为有序序列 *步骤1:递归二分待排数组 *步骤2:将二分数组合并为有序序列,放在零时数组中 *步骤3:将零时序列赋值给待排序序列 *步骤4:回溯 *//* * 合并方法 * 待排序序列,开始索引,结束索引 */void Merge(vector<int>&a, int s, int e, vector<int>&temp){ int mid = (s + e) / 2; int i = s, j = mid + 1; int k = s; while (i<=mid&&j<=e) { if (a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } //只需要管前面的是否还剩余 while (i <= mid) temp[k++]=a[i++]; for (i = s; i < k;i++) a[i] = temp[i];}/* * 递归二分 */void MergeSort(vector<int>&a, int s, int e, vector<int>&temp){ if (s<e) { int mid = (s + e) / 2; MergeSort(a, s, mid, temp); MergeSort(a, mid + 1, e, temp); Merge(a, s, e,temp); }}int main(){ int n; while (cin>>n) { vector<int>a(n); vector<int>temp(n);//传递零时容器进去,不用每次合并时都创建一个新的零时容器,节约时间 for (int i = 0; i < n; i++) cin >> a[i]; MergeSort(a, 0, n - 1, temp); for (int t : a) { cout << t << ' '; }; } return 0;}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 数据库分库分表(sharding)系列(四) 多数据源的事务处理
- C语言练习—12-8(2)
- 寒假训练赛(五) 自我总结
- JWebFileTrans- 一款可以从网络上下载文件的小程序(一)
- C11-1 浮点数输出
- 归并排序
- P1540 机器翻译
- 1033. To Fill or Not to Fill (25)-贪心(难)
- Codeforces Round #395 (Div. 1) E. Timofey and our friends animals(lct动态维护mst)
- 共同学习Java源代码-数据结构-HashMap(二)
- SURF算法及源码分析(下)
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
- mysql数据库跨域访问解决方案(添加mysql帐号方法)
- tomcat7.0.52及以上版本web.xml引用外部文件问题