实验一算法的时间复杂度.docx
- 文档编号:11630375
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:8
- 大小:48.94KB
实验一算法的时间复杂度.docx
《实验一算法的时间复杂度.docx》由会员分享,可在线阅读,更多相关《实验一算法的时间复杂度.docx(8页珍藏版)》请在冰豆网上搜索。
实验一算法的时间复杂度
南华大学
实验名称:
算法的时间复杂度
学 院:
计算机学院
专业班级:
本2010电气信息类03班
学 号:
20104030342
姓 名:
谢志兴
指导教师:
余颖
日期:
2012年3月13日
实验一算法的时间复杂度
一、实验目的与要求
熟悉C/C++语言的集成开发环境;
通过本实验加深对算法分析基础知识的理解。
二、实验内容:
掌握算法分析的基本方法,并结合具体的问题深入认识算法的时间复杂度分析。
三、实验题
定义一个足够大的整型数组,并分别用起泡排序、简单选择排序、快速排序和归并排序对数组中的数据进行排序(按从小到大的顺序排序),记录每种算法的实际耗时,并结合数据结构中的知识对算法的时间复杂度分析进行说明。
实验数据分两种情况:
1、数组中的数据随机生成;
2、数组中的数据已经是非递减有序。
四、实验步骤
理解算法思想和问题要求;
编程实现题目要求;
上机输入和调试自己所编的程序;
验证分析实验结果;
整理出实验报告。
五、实验程序
#include
#include
usingnamespacestd;
voidbubble_sort(intn[],intlength);
voidselection_sort(intn[],intlength);
voidqsort(inta[],intl,intr);
voidMergeSort(intR[],intlow,inthigh);
voidMerge(int*R,intlow,intm,inthigh);
intmain()
{
srand((unsigned)time(NULL));
inti,a[10000],b[10000];
clock_tstart1,finish1,start2,finish2,start3,finish3,start4,finish4;
doubleduration1,duration2,duration3,duration4;
for(i=0;i<10000;i++)
a[i]=rand()%10001;
for(i=0;i<10000;i++)
b[i]=a[i];
start1=clock();
bubble_sort(b,10000);
finish1=clock();
duration1=(double)(finish1-start1)/CLOCKS_PER_SEC;
for(i=0;i<10000;i++)
b[i]=a[i];
start2=clock();
selection_sort(b,10000);
finish2=clock();
duration2=(double)(finish2-start2)/CLOCKS_PER_SEC;
for(i=0;i<10000;i++)
b[i]=a[i];
start3=clock();
qsort(b,0,9999);
finish3=clock();
duration3=(double)(finish3-start3)/CLOCKS_PER_SEC;
for(i=0;i<10000;i++)
b[i]=a[i];
start4=clock();
MergeSort(b,0,9999);
finish4=clock();
duration4=(double)(finish4-start4)/CLOCKS_PER_SEC;
cout<<"乱序排序时:
"< cout<<"起泡排序duration=="< cout<<"简单选择排序duration=="< cout<<"快速排序duration=="< cout<<"归并排序duration=="< start1=clock(); bubble_sort(b,10000); finish1=clock(); duration1=(double)(finish1-start1)/CLOCKS_PER_SEC; start2=clock(); selection_sort(b,10000); finish2=clock(); duration2=(double)(finish2-start2)/CLOCKS_PER_SEC; start3=clock(); qsort(b,0,9999); finish3=clock(); duration3=(double)(finish3-start3)/CLOCKS_PER_SEC; start4=clock(); MergeSort(b,0,9999); finish4=clock(); duration4=(double)(finish4-start4)/CLOCKS_PER_SEC; cout<<"非递减有序排序时: "< cout<<"起泡排序duration=="< cout<<"简单选择排序duration=="< cout<<"快速排序duration=="< cout<<"归并排序duration=="< return0; } /*起泡排序*/ voidbubble_sort(intn[],intlength){ inttemp(0); for(inti=0;i for(intj=0;j if(n[j]>n[j+1]){ temp=n[j]; n[j]=n[j+1]; n[j+1]=temp; } } } } /*简单选择排序*/ voidselection_sort(intn[],intlength){ intGuard(0); intk(0); for(inti=0;i Guard=n[i]; k=i; for(intj=i+1;j<=length;j++) { if(n[j] k=j; } n[i]=n[k]; n[k]=Guard; } } /*快速排序*/ voidqsort(inta[],intl,intr){ inti=l,j=r,y; intx=a[(l+r)/2]; do{ while(a[i] while(a[j]>x)j--; if(i<=j){ y=a[i]; a[i]=a[j]; a[j]=y; i++;j--; } }while(i if(i if(j>l)qsort(a,l,j); } /*归并排序*/ voidMerge(int*R,intlow,intm,inthigh) { inti=low,j=m+1,p=0; int*R1; R1=(int*)malloc((high-low+1)*sizeof(int)); if(! R1) return; while(i<=m&&j<=high) R1[p++]=(R[i]<=R[j])? R[i++]: R[j++]; while(i<=m) R1[p++]=R[i++]; while(j<=high) R1[p++]=R[j++]; for(p=0,i=low;i<=high;p++,i++) R[i]=R1[p]; } voidMergeSort(intR[],intlow,inthigh) { intmid; if(low { mid=(low+high)/2; MergeSort(R,low,mid); MergeSort(R,mid+1,high); Merge(R,low,mid,high); } } 六、实验结果 运行环境: 操作系统: Windows7旗舰版32位SP1(DirectX11) 处理器: AMDA6-3400MAPUwithRadeonHDGraphics四核 主板: 宏碁Aspire4560(AMDK12) 内存: 3GB(海力士DDR31333MHz/南亚易胜DDR31333MHz) 运行结果: 第一次运行结果: 乱序排序时: 起泡排序duration==1.326 简单选择排序duration==0.531 快速排序duration==0 归并排序duration==0.015 非递减有序排序时: 起泡排序duration==0.546 简单选择排序duration==0.437 快速排序duration==0 归并排序duration==0.016 第二次运行结果: 乱序排序时: 起泡排序duration==1.326 简单选择排序duration==0.531 快速排序duration==0 归并排序duration==0.015 非递减有序排序时: 起泡排序duration==0.546 简单选择排序duration==0.437 快速排序duration==0 归并排序duration==0.016 第三次运行结果: 乱序排序时: 起泡排序duration==1.326 简单选择排序duration==0.531 快速排序duration==0 归并排序duration==0.015 非递减有序排序时: 起泡排序duration==0.546 简单选择排序duration==0.437 快速排序duration==0 归并排序duration==0.016 七、实验分析
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验一 算法的时间复杂度 实验 算法 时间 复杂度