任务描述:
生成50000个随机数,存于input.txt中,然后通过插入排序和归并排序,分别输出到OutputInsertion.txt和OutputMerge.txt中,并统计运行时间。来体会算法的时间复杂度。
代码如下:
//编译环境:GCC 3.4.5,Ubuntu 12.04 LTS //2014.3.26 #include <iostream> #include <fstream> #include <algorithm> #include <ctime> #include <iomanip> #include <cstring> using namespace std; const int MaxArraySize=50002; const int maxint=0x3f3f3f3f; int origin[MaxArraySize]; int origin2[MaxArraySize]; void InsertionSort(int n,int a[]) { int key,i; for(int j=1;j<n;j++) { key=a[j]; i=j-1; while(i>=0 && a[i]>key) { a[i+1]=a[i]; i--; } a[i+1]=key; } } void Merge(int A[],int p,int q,int r) { int len_left=q-p+1; int len_right=r-q; int *L=new int [MaxArraySize]; int *R=new int [MaxArraySize]; for(int i=0;i<len_left;i++) { L[i]=A[p+i]; } for(int j=0;j<len_right;j++) { R[j]=A[q+j+1]; } L[len_left]=maxint; R[len_right]=maxint; int i=0,j=0; for(int k=p;k<=r;k++) { if (L[i]<=R[j]) { A[k]=L[i]; i++; } else { A[k]=R[j]; j++; } } } void MergeSort(int A[],int p,int r) { int q; if(p<r) { q=(p+r)/2; MergeSort(A,p,q); MergeSort(A,q+1,r); Merge(A,p,q,r); } } int main() { //int a[]={8,1,4,6,5,2}; //InsertionSort(6,a); ifstream cin; ofstream cout; //生成1000000以内的整数,50000个 cout.open("input.txt"); srand((unsigned)time(NULL)); double cost_time; double starttime,endtime; for(int i=0;i<=50000;i++) { cout<<rand()%(1000000)<<" "; } cout.close(); cin.open("input.txt"); for(int i=0;i<=50000;i++) { cin>>origin[i]; } memcpy(origin2,origin,sizeof(origin)); cin.close(); cout.open("OutputInsection.txt"); starttime=(double)clock(); InsertionSort(50000,origin); for(int i=0;i<=50000;i++) { cout<<origin[i]<<" "; } cout<<endl; endtime=(double)clock(); cost_time=(endtime-starttime); //输出小数点后3位,单位为秒 cout<<setiosflags(ios::fixed)<<setprecision(6)<<"插入排序花费了:"<<cost_time/1000000<<endl; cout.close(); cout.open("OutputMerge.txt"); starttime=(double)clock(); MergeSort(origin2,0,50000); for(int i=0;i<=50000;i++) { cout<<origin2[i]<<" "; } cout<<endl; endtime=(double)clock(); cost_time=(endtime-starttime); //输出小数点后3位,单位为秒 cout<<setiosflags(ios::fixed)<<setprecision(3)<<"归并排序花费了:"<<cost_time/1000000<<endl; cout.close(); return 0; }
【算法导论实验1】插入排序与归并排序,布布扣,bubuko.com
原文:http://blog.csdn.net/mig_davidli/article/details/22166289