ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:24.13KB ,
资源ID:10902092      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10902092.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法实验.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法实验.docx

1、算法实验实验课程:算法分析与设计 第一部分 实验内容1. 实验目标:(1) 几种排序算法在平均情况下哪一个更快。(2) 加深对时间复杂度概念的理解。2. 实验任务:(1)实现几种排序算法(selectionsort, insertionsort,bottomupsort,quicksort, mergesort)。对于快速分类,SPLIT中的划分元素采用三者A(low),A(high),A(low+high)/2)中其值居中者。(2)随机产生20组数据(比如n=5000i,1i20)。数据均属于范围(0,105)内的整数。对于同一组数据,运行以上几种排序算法,并记录各自的运行时间(以毫秒为单位

2、)。(3)根据实验数据及其结果来比较这几种分类算法的平均时间和比较次数,并得出结论。3. 实验设备及环境:PC;vs2005 C/C+等编程语言。4. 实验主要步骤:(1) 明确实验目标和具体任务;(2) 理解实验所涉及的几个分类算法;(3) 编写程序实现上述分类算法;(4) 设计实验数据并运行程序、记录运行的结果;(5) 根据实验数据及其结果得出结论;(6) 实验后的心得体会。第二部分 问题及算法1问题描述:(1)实现几种排序算法(selectionsort, insertionsort,bottomupsort,quicksort, mergesort)。对于快速分类,SPLIT中的划分元

3、素采用三者A(low),A(high),A(low+high)/2)中其值居中者。(2)随机产生20组数据(比如n=5000i,1i20)。数据均属于范围(0,105)内的整数。对于同一组数据,运行以上几种排序算法,并记录各自的运行时间(以毫秒为单位)。2所求:根据实验数据及其结果来比较这几种分类算法的平均时间和比较次数,并得出结论。3. 算法思想:Selectionsort思想:通过从前往后比较,交换后面元素中比当前元素最小的元素。Insertionsort思想:通过从后往前比较,逐个向后移动比当前元素笑得元素。Bottomupsort思想:通过把元素分成2的幂的子集,然后进行n/(2j)次

4、的合并。Quicksort思想:通过以基准元素为标准,结合分治的思想。Mergesort思想:方法跟Bottomupsort相似。第三部分 实验结果与分析1实验数据和结果实验环境:vs2005 C+环境基于随机生成数据n(5000*i)(1=i=20)Selectionsort时间、次数Insertionsort时间、次数Bottomupsort时间、次数Quicksort时间、次数Mergesort时间、次数147ms1249750047ms62067850ms568680ms1111390ms385282203ms49995000203ms2488846916ms1235000ms2340

5、230ms824403453ms112492500469ms5653593715ms1899730ms36364516ms1234304828ms199990000844ms10000851616ms2673730ms50854315ms17613751328ms3124875001328ms1573642390ms34169916ms65139915ms22361261938ms4499850001906ms22490448616ms4103960ms7998370ms26454372656ms6124825002610ms30584869015ms5084840ms97299115ms33

6、545383485ms7999800003453ms40261071416ms5747100ms109854616ms37682394422ms10124775004344ms50504109015ms64695916ms126747116ms421620105484ms12499750005406ms62562082316ms73336516ms142720316ms47871 116656ms1512472500 6562ms75662946616ms80265715ms152599516ms52056 127906ms17999700007844ms90048981815ms880554

7、15ms171618516ms567641139297ms21124675009203ms105590084416ms95735816ms193078116ms6095111410797ms244996500010750ms122327039632ms108671015ms205070515ms7164261512500ms281246250012453ms140312806031ms115809716ms223147731ms7624461614218ms319996000014047ms160321583031ms122923516ms242878032ms8067971716031ms3

8、61245750015891ms180643778931ms131172132ms2480519 31ms8611831818188ms404995500017750ms201865261931ms138346516ms279149031ms9032631920343ms451245250020110ms226348035331ms146394515ms282324631ms9528122022750ms499995000022218ms250081349431ms156650232ms307655846ms10239822实验分析及结论从上面表格得出结论:在相同的测试数据请况下,Quicks

9、ort算法的时间复杂度最低,效率最高;但Mergesort算法的比较次数最少。第四部分 心得与展望1自我评价及心得体会此次试验十分繁杂,理解倒是很容易理解,但是写起算法来却和想象中的很不一样,有点想放弃,在与同学讨论和帮助下,终于找到了解决问题的方法2. 展望用Quicksort可以很好的解决排序问题,当正确准备地掌握了这种排序法之后,觉得接下来的排序法遇到的问题都可以迎刃而解。第五部分 附录1. 源程序#include#include#include#define ms 100005using namespace std;typedef unsigned long long LL;LL cn

10、t; /计算次数int arry1ms , tmp1ms , arryms;int num;class Sort public: Sort(void); Sort(void); void Init(); void Randominit(int n); void Selectionsort(int arry , int n); void Insertionsort(int arry , int n); void Bottomupsort(int arry ,int tmp1 , int n); void Quicksort(int arry , int low , int high , LL &

11、cnt); int Split(int arrty , int low , int high , LL &cnt); void Mergesort(int arry ,int tmp1 , int n); void Merge(int arry , int tmp1 , int low ,int mid ,int high); void Mergepass(int arry , int tmp1 , int length , int n);sort1; /对象Sort:Sort()void Sort:Init() int i; coutnum; cout请输入数组的元素:endl; for(i

12、 = 1 ; i arry1i;void Sort:Randominit(int n) int i; arry10=0; srand(unsigned)time(0); for(i = 1 ; i = n * 5000 ;i +) arry1i = rand() % (ms-4) ; num = n * 5000;void Sort:Selectionsort(int arry1 , int n) cnt = 0; memcpy(arry , arry1 , 100005*sizeof(int); int i , j ,pos; for(i = 1 ; i n ; i +) pos = i;

13、for(j = i + 1 ; j = n ; j +) cnt+; if(arryj arrypos) /寻找最小的元素 pos = j; if(pos != i) /交换位置 int tmp = arrypos; arrypos = arryi; arryi = tmp; void Sort:Insertionsort(int arry1 , int n) cnt = 0; memcpy(arry , arry1 , 100005*sizeof(int); int tmp ,i ,j; for(i = 2 ; i 1 & arryj-1 tmp) /当前元素与前面的元素比较 cnt +;

14、arryj = arryj-1; j -; arryj = tmp; void Sort:Merge(int arry , int tmp1 , int low , int mid , int high) int i = low ,j = mid + 1 , k = low;/对三个位置指示器赋初值 while(i = mid & j = high) cnt +; if(arryi mid) for(i = j ; i = high ; i +) tmp1k+ = arryi; else for(j = i ; j = mid ; j +) tmp1k+ = arryj; for(i = lo

15、w ; i = high ; i +) arryi = tmp1i; void Sort:Bottomupsort(int arry1 ,int tmp1 , int n) cnt = 0; memcpy(arry , arry1 , 100000*sizeof(int); memset(tmp1 , 0 , sizeof(tmp1); int t = 1 , s ,i; while(t n) s = t; t = 2 * s; /n个数分数的幂个数 i = 0; while(i + t = n) sort1.Merge(arry ,tmp1 , i + 1 , i + s , i + t);

16、 i = i + t; if(i + s) n) sort1.Merge(arry , tmp1 , i + 1 , i + s , n); / 对剩余元素复制 int Sort:Split(int arry , int low , int high , LL &cnt) int i ,j; i = low , j = high; arry0 = arrylow; while(i j) while(i = arry0) cnt +; j -; if(i j) arryi+ = arryj; while(i j) & (arryi = arry0) cnt +; i +; if(i j) arr

17、yj-=arryi; arryi = arry0; return i;void Sort:Quicksort(int arry , int low , int high , LL &cnt) int mid; if(low high) mid = sort1.Split(arry , low , high ,cnt); Quicksort(arry , low , mid - 1 ,cnt); Quicksort(arry , mid + 1 , high ,cnt); void Sort:Mergepass(int arry , int tmp1 , int length , int n)

18、int l = 0 ,j; while(l + 2 * length - 1 = n) sort1.Merge(arry , tmp1 , l , l + length - 1 , l + 2 * length - 1); l = l + 2 * length; if(l + length - 1 n) sort1.Merge(arry , tmp1 , l , length + l - 1 , n); else for(j = l ; j = n ; j +) tmp1j = arryj; for(l = 0 ; l = n ; l+) arryl = tmp1l; void Sort:Me

19、rgesort(int arry1, int tmp1 , int n) cnt = 0; memcpy(arry , arry1 , 100005 * sizeof(int); memset(tmp1 , 0 ,sizeof(tmp1); int length = 1; while(length = n) Mergepass(arry1 , tmp1 , length , n); length = 2 * length; Sort:Sort()int main() int choice ,i; while(1) cout*菜单*endl; cout1.手动输入数据endl; cout2.随机

20、输入数据endl; cout3.退出endl; coutchoice; clock_t begin , end; switch(choice) case 1: sort1.Init(); cout手动输入数据时间比较如下endl; begin=clock(); sort1.Selectionsort(arry1 , num); end=clock(); coutSelectionsort的时间是: (double)end-beginmsendl; cout比较次数是: cntendlendlendl; begin=clock(); sort1.Insertionsort(arry1 , num

21、); end=clock(); coutInsertionsort的时间是: (double)end-beginmsendl; cout比较次数是: cntendlendlendl; begin=clock(); sort1.Bottomupsort(arry1 ,tmp1 , num); end=clock(); coutBottomupsort的时间是: (double)end-beginmsendl; cout比较次数是: cntendlendlendl; int arry100005; memcpy(arry , arry1 , 100005 * sizeof(int); begin=

22、clock(); sort1.Quicksort(arry , 1 , num , cnt); end=clock(); coutQuicksort的时间是: (double)end-beginmsendl; cout比较次数是: cntendlendlendl; begin=clock(); sort1.Mergesort(arry1 ,tmp1 , num); end=clock(); coutMergesort的时间是: (double)(end-begin)msendl; cout比较次数是: cntendlendlendl; break; case 2: cout随机生成数据时间比较

23、如下endl; for(i = 1 ; i = 20 ;i +) cout第i次比较时间如下endl; sort1.Randominit(i); begin=clock(); sort1.Selectionsort(arry1 , num); end=clock(); coutSelectionsort的时间是: (double)(end-begin)msendl; cout比较次数是: cntendlendlendl; begin=clock(); sort1.Insertionsort(arry1 , num); end=clock(); coutInsertionsort的时间是: (d

24、ouble)(end-begin)msendl; cout比较次数是: cntendlendlendl; begin=clock(); sort1.Bottomupsort(arry1 ,tmp1 , num); end=clock(); coutBottomupsort的时间是: (double)(end-begin)msendl; cout比较次数是: cntendlendlendl; int arry100005; memcpy(arry , arry1 , 100005 * sizeof(int); begin=clock(); sort1.Quicksort(arry1 , 1 , num ,cnt); end=clock(); coutQuicksort的时间是: (double)(end-begin)msendl; cout比较次数是: cntendlendlendl; begin=clock(); sort1.Mergesort(arry1 ,tmp1 , num); end=clock(); coutMergesort的时间是: (double)(end-begin)msendl; cout比较次数是: cntendlendlendl; break; case 3: exit(1); return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1