标签:style class java http tar ext
归并排序(merging sort): 包含2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表.
归并排序(merge sort)的时间复杂度是O(nlogn), 实际效果不如快速排序(quick sort)和堆排序(heap sort),
但是归并排序是稳定排序, 而快速排序和堆排序则不是.
代码:
-
-
- #include <iostream>
- #include <algorithm>
- #include <iterator>
-
- using namespace std;
-
- void Merge (const std::vector<int> SR, std::vector<int>& TR, int i, int m, int n)
- {
- int j , k;
- for (j=m+1, k=i; i<=m && j<=n; ++k) {
- if (SR[i] < SR[j])
- TR[k] = SR[i++];
- else
- TR[k] = SR[j++];
- }
- if (i<=m)
- std::copy((SR.begin()+i), (SR.begin()+m+1), TR.begin()+k);
- if (j<=n)
- std::copy((SR.begin()+j), (SR.begin()+n+1), TR.begin()+k);
- }
-
- void MSort (const std::vector<int> SR, std::vector<int>& TR, int s, int t)
- {
- std::vector<int> tempTR(SR.size());
- if (s == t)
- TR[s] = SR[s];
- else {
- int m = (s+t)/2;
- MSort(SR, tempTR, s, m);
- MSort(SR, tempTR, m+1, t);
- Merge(tempTR, TR, s, m, t);
-
-
- }
- }
-
- void MergeSort (std::vector<int>& L) {
- MSort(L, L, 0, L.size()-1);
- }
-
- int main (void)
- {
- std::vector<int> L = {49, 38, 65, 97, 76, 13, 27, 49};
- MergeSort(L);
- copy(L.begin(), L.end(), ostream_iterator<int>(cout, " "));
- std::cout << std::endl;
- return 0;
- }
输出:
数据结构 - 归并排序(merging sort),布布扣,bubuko.com
数据结构 - 归并排序(merging sort)
标签:style class java http tar ext
原文地址:http://www.cnblogs.com/fengyv/p/3793506.html