算法导论CLRS 2.3 合并排序
2012-10-22 15:46
197 查看
2.3 合并排序
/*2.3合并排序
*MERGE-SORT */ #include<cstdlib> #include<limits> #include<iostream> #include<vector> #include<iomanip> using namespace std; typedef vector<int>::iterator ivecIte; void merge(vector<int> &ivec, ivecIte iteB, ivecIte iteMark, ivecIte iteE) { vector<int> v1(iteB, iteMark), v2(iteMark, iteE); //哨兵!!! v1.push_back(numeric_limits<int>::max()); v2.push_back(numeric_limits<int>::max()); ivecIte ite1 = v1.begin(), ite2 = v2.begin(); for(ivecIte iteTurn = iteB; iteE != iteTurn; ++iteTurn){ if(*ite2 > *ite1) {*iteTurn = *ite1; ite1++;} else{*iteTurn = *ite2; ite2++;} } } void mergeSort(vector<int> &ivec, ivecIte iteB, ivecIte iteE) { size_t div = iteE - iteB; if(1 < div) { div /= 2; mergeSort(ivec, iteB, iteB + div); mergeSort(ivec, iteB + div, iteE); merge(ivec, iteB, iteB + div, iteE); } } int main() { vector<int> ivec; cout<<"input some integers with end-of-file!"<<endl; int inData; while(cin>>inData) ivec.push_back(inData); ivecIte iteS = ivec.begin(), iteE = ivec.end(); mergeSort(ivec, iteS, iteE); for(iteS = ivec.begin(); iteS != ivec.end(); ++iteS) cout<<setw(5)<<*iteS; cout<<endl; system("PAUSE"); return EXIT_SUCCESS; }
相关文章推荐
- 算法导论Java实现-合并排序(包含习题2.3-2)
- 算法导论Java实现-合并排序(包含习题2.3-2)
- 算法导论--JAVA实现合并排序详解
- W. :利用合并排序和二分查找实现习题2.3-7
- 算法导论 CLRS 2.3-7 2-2
- 算法导论2.3-7(未排序数组) 和 剑指offer面试题41(排序数组)
- 《算法导论》习题2.3-4 插入排序的递归版本
- 【算法导论】 2.3合并排序
- 《算法导论》3、合并排序实现(C++)
- 算法导论学习笔记(3)-习题2.3-7-排序+二分
- 《算法导论》学习笔记之Chapter 2-2.1,2.2,2.3插入排序,选择排序,归并排序
- 算法导论6.5-8堆排序-K路合并
- 算法导论6.5-8堆排序-K路合并
- 算法导论笔记之---合并排序应用之求逆序数
- CLRS-Ch2(插入排序、合并排序、冒泡排序)
- 学习《算法导论》第二章 合并排序 总结
- 算法导论——合并排序
- 算法导论(CLRS, 2nd) 个人答案 Ch2.3
- 算法导论,合并排序,c实现。
- 算法导论学习2.3-4 插入排序的递归版本