iterative-mergesort
来源:互联网 发布:交换机每个端口的带宽 编辑:程序博客网 时间:2024/06/07 07:10
function iterative-mergesort(a[1...n])Input: elements a1, a2, ..., an to be sortedQ = [ ] (empty queue)for i = 1 to n: inject(Q, [ai])while |Q| > 1: inject(Q, merge(eject(Q), eject(Q)))return eject(Q)
上面是课本的伪代码,下面简单实现一下:
这个算法和平常的mergesort不同的是,它直接从单个元素的merge开始,一直merge成一个数组,减少了不断递归到单个元素才merge的过程。
#include<bits/stdc++.h>using namespace std;vector<int> merge(vector<int> & x, vector<int> & y) { vector<int> ret; int i = 0, j = 0; while (i < x.size() && j < y.size()) { if (x[i] < y[j]) { ret.push_back(x[i]); i++; } else { ret.push_back(y[j]); j++; } } while (i < x.size()) { ret.push_back(x[i]); i++; } while (j < y.size()) { ret.push_back(y[j]); j++; } return ret;}vector<int> mergesort(vector<int> & vec) { queue<vector<int>> que; for (int i = 0; i < vec.size(); i++) { vector<int> v(1, vec[i]); que.push(v); } while (que.size() > 1) { vector<int> v1(que.front()); que.pop(); vector<int> v2(que.front()); que.pop(); que.push(merge(v1, v2)); } return que.front();}int main() { int arr[] = {3, 2, 4, -1, 2, 0, 8, 5, 9}; vector<int> v(arr, arr + sizeof(arr)/sizeof(int)); v = mergesort(v); for (auto val : v) cout << val << " "; cout << endl; return 0;}
阅读全文
0 0
- iterative-mergesort
- 4-1 Iterative Mergesort
- c编写Iterative Mergesort
- 4-1 Iterative Mergesort (9分)
- 浙大PTA4-1 Iterative Mergesort 的case
- 4-1 Iterative Mergesort (9分)
- MergeSort
- mergesort
- MergeSort
- mergesort
- mergesort
- Mergesort
- mergesort
- mergeSort
- mergeSort
- mergesort
- MergeSort
- MergeSort
- KNN入门学习笔记
- 3个线程依次轮流打印出75个数
- sem创意 账户设计 sem分词及导入
- 验证
- 2017.10.14 【FOTILE模拟赛】L 失败总结
- iterative-mergesort
- sphinx全文检索之PHP使用教程
- 065: 不定积分重要类型之有理函数积分
- DATEADD()函数
- Spring 基于Introduction的引入
- 猜数游戏
- CS224n笔记三之词向量模型与GloVe
- 【Python-3.3】win7 安装pip
- strtus2自定义转换器