实现快排最优版本算法上机报告课件资料.docx
- 文档编号:24322743
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:12
- 大小:67.19KB
实现快排最优版本算法上机报告课件资料.docx
《实现快排最优版本算法上机报告课件资料.docx》由会员分享,可在线阅读,更多相关《实现快排最优版本算法上机报告课件资料.docx(12页珍藏版)》请在冰豆网上搜索。
实现快排最优版本算法上机报告课件资料
算法导论第二次上机报告
班级:
1403018姓名:
张可心学号:
14030188030
(一)题目一
一、问题
Thisprojectrequiresyoutoimplementanoptimizedversionofquicksort,andcomparetheperformancesofthefollowingcombinations:
(1)Cutoffvaluesfrom0to50;
(2)Takepivottobethe1stelement,random,medianofrandomthree,andmedianofrandomfive.
Thetestsmustbedoneonthefollowingthreekindsofinputs:
(1)sortedinput;
(2)reverse-orderedinput;
(3)randominput.
Thesizeofinputcanbetakenfrom1000to10000.Theruntimesmustbeplottedwithrespecttothesizestoillustratethedifference.(figureoutusingexcel,matlabintheReport)
二、问题分析
实现快排的最优版本,分别选取第一个数,随机数,三个随机数的中位数,五个随机数的中位数为基数,设置顺序,随机,逆序三种形式,用_qsort(inta[],intp,intr,intnumber)和Partition(inta[],intp,intr,intnumber)俩函数进行排序。
三、算法伪代码
void_qsort(a,p,r,number)
ifp q=Partition(a,p,r,number) _qsort(a,p,q-1,number) _qsort(a,q+1,r,number) intPartition(inta[],intp,intr,intnumber) { intx,temp; if(number==1) { temp=p; } elseif(number==2) { temp=rand()%(r-p+1)+p; } elseif(number==3) { intb[5]; b[1]=rand()%(r-p+1)+p; b[2]=rand()%(r-p+1)+p; b[3]=rand()%(r-p+1)+p; sort(b+1,b+4); temp=b[2]; } elseif(number==4) { intb[10]; b[1]=rand()%(r-p+1)+p; b[2]=rand()%(r-p+1)+p; b[3]=rand()%(r-p+1)+p; b[4]=rand()%(r-p+1)+p; b[5]=rand()%(r-p+1)+p; sort(b+1,b+6); temp=b[3]; } else{ temp=p; } x=a[temp]; swap(a[temp],a[p]); inti=r+1; for(intj=r;j>p;j--) { if(a[j]>=x) { i--; swap(a[i],a[j]); } } swap(a[i-1],a[p]); returni-1; } intmain() { intn,a[200000]; cout<<"测试数据: "; cin>>n; for(inti=1;i<=n;i++) a[i]=random(51); cout<<"序列的顺序(1顺序;2随机;3逆序): "; ints; cin>>s; if(s==3) sort(a+1,a+1+n,greater elseif(s==1) sort(a+1,a+1+n); elseif(s==2){ } else{ } cout<<"确定基数: 1,第一个数;2,随机数;3,3个随机数的中位数;4,5个随机数的中位数: "; intnumber; cin>>number; clock_tstart,end;//计时 start=clock(); _qsort(a,1,n,number); end=clock(); cout<<"用时: "< for(inti=1;i<=n;i++) { cout< } return0; } 四、算法分析 对数据进行快排,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 五、测试结果 1以第一个数为基数的排序时间,单位ms. 2以随机数为基数的排序时间,单位ms 3以三个随机数的中位数为基数的排序时间,单位ms 4以五个随机数的中位数为基数的排序时间,单位ms (二)题目二 一、问题 ImplementHoare’salgorithmandcompareitwithouralgorithminthetextbook.(体会有重复数据情况下,算法之间的优劣)。 Theinputisalsotakenform1000and10000(between0and50),andthetestsshouldbedoneontherandominput.Theruntimesmustbeplottedwithrespecttothesizestoillustratethedifference.(figureoutusingexcel,matlabintheReport) 二、问题分析 实现Hoare快排算法,并和我们的快排算法相比较,即体会重复数据情况下,算法的优劣。 三、算法伪代码 void_qsort(a,p,r) ifp q=Hoare_Partition(a,p,r); _qsort(a,p,q-1); _qsort(a,q+1,r); Hoare_Partition(a,p,r) x=a[p] i=p-1 j=r+1 while (1) while (1) j=j-1 ifa[j]=x break while (1) i=i+1 ifa[i]>=x break ifi swap(a[i],a[j]) else returnj main() intn,a[200000] cout<<"输入数据多少: " cin>>n forinti=1i<=ni=i+1 a[i]=random(51) clock_tstart,end start=clock() _qsort(a,1,n) end=clock() cout<<"运行时间:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 最优 版本 算法 上机 报告 课件 资料