数据结构与算法——归并排序
2016-01-11 16:13
609 查看
归并排序以O(NlogN)最坏情形运行时间运行;这个算法是经典的分治策略,它将问题分成一些小的问题然后递归求解,而治的阶段则是将分的阶段解得的各答案修补在一起。分治是递归非常有力的方法。
基本思路:
源代码:
/************************************************************************* > File Name: merge_sort.cpp > Author: > Mail: > Created Time: 2016年01月11日 星期一 15时16分26秒 ************************************************************************/ #include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; template<class T> void merge(vector<T> & a, vector<T> & tmpArray, int leftPos, int rightPos, int rightEnd) { int leftEnd = rightPos - 1; int tmpPos = leftPos; int numElements = rightEnd - leftPos + 1; while(leftPos <= leftEnd && rightPos <= rightEnd){ if(a[leftPos] <= a[rightPos]) tmpArray[tmpPos++] = a[leftPos++]; else tmpArray[tmpPos++] = a[rightPos++]; } while(leftPos <= leftEnd) tmpArray[tmpPos++] = a[leftPos++]; while(rightPos <= rightEnd) tmpArray[tmpPos++] = a[rightPos++]; for (int i = 0; i < numElements; i++, rightEnd--) a[rightEnd] = tmpArray[rightEnd]; } template<class T> void mergeSort(vector<T> &a, vector<T> & tmpArray, int left, int right) { if (left < right){ int center = (left+right)/2; mergeSort(a, tmpArray, left, center); mergeSort(a, tmpArray, center+1, right); merge(a, tmpArray, left, center+1, right); } } template<class T> void mergeSort(vector<T> & a) { vector<T> tmpArray(a.size()); mergeSort(a, tmpArray, 0, a.size()-1); } int main() { vector<int> v; v.push_back(12); v.push_back(8); v.push_back(3); v.push_back(8); v.push_back(10); v.push_back(1); v.push_back(2); v.push_back(14); v.push_back(15); v.push_back(9); v.push_back(7); v.push_back(4); cout << "v: "; copy(v.begin(), v.end(), ostream_iterator<int>(cout, " ")); cout << endl; mergeSort(v); cout << "mergeSorted v: "; copy(v.begin(), v.end(), ostream_iterator<int>(cout, " ")); cout << endl; return 0; }
相关文章推荐
- opencv 基本数据结构
- 数据结构之稀疏矩阵存储实现
- 学习笔记------数据结构(C语言版) 静态链表
- sunday算法
- 初学循环队列
- BF算法
- IOS-底层数据结构
- Haffman编码/译码——数据结构作业(二)
- 校园导航——数据结构作业(一)
- Java之Pcap文件解析(二:建立数据结构)
- 学数据结构,仅仅须要主要的编程体验
- 数据结构_3:栈:STL
- 数据结构_3:栈:C++
- 数据结构之 数组
- 【Java】Java数据结构和算法(二)——栈和队列
- 数据结构与算法——堆排序
- C语言数据结构——队列
- 常用数据结构Stack
- 翻译:程序员数据结构基础:选择正确的数据结构
- 数据结构之散列表实现