在文章:http://blog.csdn.net/zhongkelee/article/details/44490315的基础上,利用c++中的vector容器代替数组来实现,但是发现这样做大大的增加了程序运行的时间,并且两者的运行时间几乎差不多
改写的程序
#include <iostream>
#include <vector>
#include"stdio.h"
#include <time.h>
#include <assert.h>
using namespace std;
//插入排序
vector<int> InsertSort(vector<int> ptr)
{
int key;
for (int i=1;i<ptr.size();i++)
{
key=ptr[i];
int j=i-1;
while (j>=0&&ptr[j]>key)
{
ptr[j+1]=ptr[j];
j--;
}
ptr[j+1]=key;
}
return ptr;
}
//对已经排列子序列合并
void Merge(vector<int>*ptr,int begin, int end,int mid )
{
int imax=numeric_limits<int>::max();
vector<int>left,right;
//使用哨兵位
int left_size=mid-begin+1;
int right_size=end-mid;
for (int i=0;i<left_size;i++)
{
left.push_back(ptr->data()[begin+i]);
}
left.push_back(imax);
for (int i=0;i<right_size;i++)
{
right.push_back(ptr->data()[mid+1+i]);
}
right.push_back(imax);
int i=0,j=0;
for (int k=begin;k<=end;k++)
{
if(left[i]<=right[j])
ptr->data()[k]=left[i++];
else
ptr->data()[k]=right[j++];
}
}
//归并排序子序列排序操作
void MergeSort(vector<int> *ptr,int begin,int end){
if (begin>=end)
return;
int mid=(begin+end)/2;
MergeSort(ptr,begin,mid);
MergeSort(ptr,mid+1,end);
Merge(ptr,begin,end,mid);
}
//输出容器整数
void Output(vector<int> ptr){
for (int i=0;i<ptr.size();i++)
{
cout<<ptr[i];
cout<<",";
}
cout<<endl;
}
int main()
{const int TEST_NUM=100000;//测试数据的个数
vector<int> a;
vector<int> sort_a;
srand((int)time(NULL));//以当前时间对应的int值为随机序列起点
for (int i=0;i<TEST_NUM;i++)
{
a.push_back(rand());//产生随机数
}
cout<<"Test number: "<<TEST_NUM<<endl;
clock_t t=clock();
sort_a=InsertSort(a);
cout<<"InsertSort Time:"<<clock()-t<<endl;
vector<int>*ptr=&a;
MergeSort(ptr,0,TEST_NUM-1);
cout<<"MergeSort Time:"<<clock()-t<<endl;
//sort_a=MergeSort(a,0,3);
for (int i=0;i<10;i++)//判断是否正确排序
{
assert(a[i]==sort_a[i]);
}
cout<<"sort done!"<<endl;
system("pause");
}