在文章: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");
}