在上一篇文章中实现了递归方法的归并排序。归并排序时间效率很好,虽然使用递归的方法实现很简单易读,但是容易造成空间性能上的损耗(反复的函数调用引起)。因此,有采用循环的方式实现归排序。给出了两种写法,一种是我自己写的(第一种),一种是weiss书上的课后习题的参考答案(第二种),思想是一样的,第二种明显比第一种写法简单很多。
程序如下
#include<iostream>
#include<vector>
#include<random>
#include<ctime>
#include<iterator>
#include<algorithm>
using namespace std;
/*
归并排序中使用的合并函数
a为原始数据
tmpArray用于存放归并排序过程中的结果
leftPos表示前一个子列的最左端的元素的下标
rightPos表示后一个子列的最左端的元素的下标
rightEnd表示后一个子列的最右端的元素的下标
*/
template<typename Comparable>
void merge(vector<Comparable> &a,
vector<Comparable> &tmpArray, int leftPos, int rightPos,