算法分析与设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计与分析
学院:计算机科学与技术
学号:*********
姓名:***
2014 11 14
1、 当问题规模100 N 时,快速排序和插入排序各需多少时间?写清机器配置,列出五种
规模下各自需要的时间。按照下列表格提交: 快速排序所需时间(ms) 插入排序所需时间(ms ) 两者相差多少 N=100 0.00600 0.019000 -0.013000 N=1000 0.074000 0.724000 -0.650000 N=10000 0.032000 64.657000 -64.625000 N=100000 13.300000 50.900000 -37.600000 N=1000000
53.500000
117.700000
-64.200000
机器配置:
Window 7 32位
Cpu :Inter(R)Core(TM)******************AMD Radeon HD 6450 Graphics
程序:
#include
#include
#include
#include
int b[1000000];
void QuickSort(int low ,int high)
{
long i,j;
int x;
i=low;
j=high;
x=a[i];
while(i { while(a[j]>=x&&i a[i]=a[j]; while(a[i]<=x&&i a[j]=a[i]; } a[i]=x; if(low<(i-1)) QuickSort(low,i-1); if(high>(j+1)) QuickSort(j+1,high); } void BinaryInsertSort(int length) { int low,high,mid; int i,j,m;//m为保存待插入的元素 for(i=1;i { m=b[i]; low=0; high=i-1;//设置初始区 while(low<=high) { mid=(low+high)/2; if(m>=b[mid]) low=mid+1; else high=mid-1; } for(j=i-1;j>=high+1;j--)//high为插入位置 b[j+1]=b[j];//后移元素,留出插入的空位b[high+1]=m;//将元素插入正确的位置 } } void main() { time_t start,finish;//time_t 相当于long double between_time1,between_time2,between_time; //1表示快速排序所需时间,2表示插入排序所需时间,between_time表示两种排序之间的差值 struct _timeb timebuffer1,timebuffer2; int startm,finishm; double total1=0,total2=0; //1表示规模为N时,快速排序所需的累计时间,2表示规模为N是,插入排序所需的累计时间 int N,i,j;//N表示问题规模 printf("\n请输入问题的规模:"); scanf("%d",&N); //对一堆数据进行排序,排序1000次,求其排序的平均时间 for(i=0;i<1000;i++) { srand((unsigned)time(NULL));//对每次的排序进行设置随机种子(即编号) for(j=0;j { a[j]=rand(); b[j]=a[j]; } //快速排序 _ftime(&timebuffer1);//计算当前时间 startm=litm;// start=timebuffer1.time; QuickSort(0,N-1); // printf("\n快速排序之后的数据为:"); //for(i=0;i // { // printf("%d ",a[i]); // } _ftime(&timebuffer1); finishm=litm; finish=timebuffer1.time; between_time1=difftime(finish,start);//找出时间差 between_time1=1000*between_time1+finishm-startm; total1=total1+between_time1; // 插入排序 _ftime(&timebuffer2); startm=litm; start=timebuffer2.time; BinaryInsertSort(N); //printf("\n插入排序之后的数据为:"); //for(i=0;i //{ // printf("%d ",b[i]); // } _ftime(&timebuffer2); finishm=litm; finish=timebuffer2.time; between_time2=difftime(finish,start); between_time2=between_time2*1000+finishm-startm;// total2=total2+between_time2; } printf("\n快速排序的时间(以毫秒为单位)是:%6.6f",total1/1000); printf("\n插入排序的时间(以毫秒为单位)是:%6.6f",total2/1000); between_time=total1/1000-total2/1000; printf("\n两种排序相差的时间是:%6.6f\n\n",between_time); } 2用贪心算法实现背包问题,按下表格式列出其中的五种情况,其中物品个数、背包容量、物品重量和物品价值要随机产生。