数据结构C++算法实现2 - 归并排序1
来源:互联网 发布:mac win10 iso 下载 编辑:程序博客网 时间:2024/04/27 22:25
研究了三本书的归并排序的写法,
一:严蔚敏 数据结构;
写得太过于复杂,是这本书中写的最垃圾的算法,我一共研究过四遍吧,算法用错中复杂的参数和递归,令人看得非常头大。建议大家不要学习这本书的这个算法。因为是考研书,所以不得不看。
二:王红梅 算法设计与分析;
跟严蔚敏的书中算法差不多,不过该书漏了点东西,直接导致运算结果是错误的。所以不多说,这本书最多浏览一下其中的思想,不宜细看。因为是本人的的研究生课本,所以本人不得不研究。
三: Introduction to Algorithm
经典书籍,算法都是伪代码写的,不过基本上你有那么一点点编程基础的话,就可以非常容易的看懂并轻易把这些伪代码转换成为你熟悉的程序语言。其中的归并排序也是一目了然,很好懂。
下面给出严蔚敏的算法,下一遍文章再分析Introduction to algorithm的算法。比较一下这两个有什么不一样。
以下代码是本人简化了一点书本上的代码写成的。
#include<iostream>using namespace std;const int MAXS = 20;void merge(int t1[], int t2[], int s, int m, int t){int i=s, j=m+1, k=s;while(i<=m&&j<=t){if(t1[i]<=t1[j]){t2[k++]=t1[i++];}else{t2[k++]=t1[j++];}}while(i<=m){t2[k++]=t1[i++];}while(j<=t){t2[k++]=t1[j++];}}void mergeSort(int t1[], int t2[], int s, int t){int m;int tr[MAXS];if(s==t) t2[s]=t1[s];else{m = (s+t)/2;mergeSort(t1, tr, s, m);mergeSort(t1, tr, m+1, t);merge(tr, t2, s, m, t);}}template<typename T>class Print{public:Print(){}void inline operator()(const T& x) const{cout<<x<<" ";}};//这就是函数对象,这里并没有带数据,只是一个简单的输出操作。template<class C, class Oper>void for_all(C &c, Oper op){for(auto x:c)//C++新特性,记住其实就是一种方便循环遍历数据的写法op(x);}/*写一个通用的函数,增加其可重用性,配合下面的Print函数就可以打印各种不同的数据到屏幕,非常方便。*/int main(){int a[4]={5,2,90,8}; int b[7]={2,10,7,30,9,4,5};int c[3]={9,5,8};mergeSort(b, b, 0, 6);for_all(b,Print<int>());cout<<endl;mergeSort(a, a, 0, 3);for_all(a,Print<int>());cout<<endl;mergeSort(c, c, 0, 2);for_all(c,Print<int>());cout<<endl;return 0;}
总结:
以上代码还不完善,主要是想对比一下这两本书中的代码的异同,不然也不写这本书的代码了。不过能把这个代码看懂的话,说明你还是很聪明的,因为的确是写的非常复杂。如果是面试的时候,或者其他有压力的场合下写的话,恐怕很难调试出来,除非熟记了,要自己按照他的思路来写的话我觉得不太现实。所以还是集中精力学Introduction to Algorithm这本书的代码吧。
- 数据结构C++算法实现2 - 归并排序1
- 【大话数据结构&算法】归并排序(Java/C实现源码)
- 数据结构(C#)_排序算法(归并排序)
- 数据结构算法】--【排序】:归并排序实现源码
- 数据结构C++算法实现3 - 归并排序2
- 数据结构与算法:C++实现归并排序
- (十一)数据结构之归并排序算法实现
- 数据结构之---C语言实现归并排序
- 排序算法(C实现)-------- 归并排序
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- [数据结构] 归并排序算法
- 数据结构算法之排序系列Java、C源码实现(7)--归并排序
- 【算法】归并--C语言实现归并排序递归算法
- 数据结构归并排序实现
- 归并排序算法 C代码实现
- 归并排序算法实现(C++)
- 归并排序算法 C代码实现
- JavaScript的异步实现
- 植物大战僵尸
- hdu2222 Keywords Search (AC自动机)
- UVA - 11489 Integer Game
- vb.net 关于log的简单代码
- 数据结构C++算法实现2 - 归并排序1
- 金融系统中PBOC/EMV的TLV的算法实现(含C++/C#)
- 【算法】深度优先搜索(DFS)I
- 让你的开发变得更加快起来
- 2013年长沙网络赛G题
- Spring如何处理线程并发
- 登山
- 新建项目(failed to import..)解决方法
- ios页面间传递参数四种方式