【算法导论实验1】插入排序与归并排序
来源:互联网 发布:男性特点知乎 编辑:程序博客网 时间:2024/05/22 13:02
任务描述:
生成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;}
如果你用的是VS2008/2010的话,需要将Merge函数里定义的L和R数组变成全局变量。否则会报错。
然后在函数里加入清零语句:
memset(L,0,sizeof(L));
memset(R,0,sizeof(R));
1 0
- 【算法导论实验1】插入排序与归并排序
- 插入、归并排序 《算法导论》
- 算法导论:插入排序和归并排序
- 算法导论-插入排序,归并排序,快速排序总结
- 【算法导论】归并排序
- [算法导论]归并排序
- 算法导论-----归并排序
- 【算法导论】归并排序
- 算法导论-归并排序
- 算法导论-归并排序
- 算法导论 归并排序
- 算法导论-归并排序
- 《算法导论》--归并排序
- 算法导论--归并排序
- 算法导论-循环不变式、插入排序、归并排序
- 算法导论系列文章之插入排序和归并排序
- 算法导论:第一讲:插入排序和归并排序
- 算法导论第二章总结:插入排序、归并排序
- 发给谁
- 一道循环递归笔试题
- 基础加强:JDK新特性
- 从计算机的观点看对象
- 那些中国产品经理看不懂的美国Startup
- 【算法导论实验1】插入排序与归并排序
- 如何一次性改变Android应用进出动画
- VC6 下 libpng 库的编译与初步使用以及压缩与解压缩
- python调用windows下的com组件
- htop安装与使用
- 2013.3.26
- linux WIFI 配置
- iOS7中实现子视图旋转方向控制
- 关掉Ctrl+Alt+方向键转屏功能