中国科技大学算法导论第一次实验报告综述.docx
- 文档编号:23788306
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:11
- 大小:627.03KB
中国科技大学算法导论第一次实验报告综述.docx
《中国科技大学算法导论第一次实验报告综述.docx》由会员分享,可在线阅读,更多相关《中国科技大学算法导论第一次实验报告综述.docx(11页珍藏版)》请在冰豆网上搜索。
中国科技大学算法导论第一次实验报告综述
快速排序实验报告
SA14225010
1、题目
当输入数据已经“几乎”有序时,插入排序速度很快。
在实际应用中,我们可以利用这一特点来提高快速排序的速度。
当对一个长度小于k的子数组调用快速排序时,让它不做任何排序就返回。
当上层的快速排序调用返回后,对整个数组运行插入排序来完成排序过程。
试证明:
这一排序算法的期望时间复杂度为O(nk+nlg(n/k))。
分别从理论和实践的角度说明我们应该如何选择k?
2、算法思想
当输入数据已经“几乎”有序时,插入排序速度很快。
当对一个长度小于k的子数组调用快速排序时,让它不做任何排序就返回。
当上层的快速排序调用返回后,对整个数组运行插入排序来完成排序过程。
累加k的值,计算出当k为不同值时算法运行的时间,来算出当k大约为什么值时运行的时间最短,并与传统的快速排序算法的运行时间进行比较。
3、实验结果
输入100个不同的整数值,选取不同的k的值,观察所用时间
4、实验分析
理论上看,k的值选取为20到25较好;但是,从实际上来看,当k为50左右时间为39毫秒,最少,但不同的时刻运行后的时间都不相同,而且不同的输入时刻的运行时间也不相同,当数据较大时候,对k的值的选取有会有所不同,同时不同性能的机器对测试结果也不同,所以对于k值的选取没有固定的数值。
#include
#include
usingnamespacestd;
#defineM40
voidswap(int*a,int*b)
{
inttem;
tem=*a;
*a=*b;
*b=tem;
}
intpartition(intv[],constintlow,constinthigh)
{
inti,pivotpos,pivot;
pivotpos=low;
pivot=v[low];
for(i=low+1;i<=high;++i)
{
if(v[i] { pivotpos++; if(pivotpos! =i)swap(v[i],v[pivotpos]); } } v[low]=v[pivotpos]; v[pivotpos]=pivot; //cout<<"thepartitionfunctioniscalled\n"; returnpivotpos; } /* voidQuickSort(inta[],constintlow,constinthigh) { intitem; if(low { item=partition(a,low,high); QuickSort(a,low,item-1); QuickSort(a,item+1,high); } } */ voidQuickSort(inta[],constintlow,constinthigh) { intitem; if(high-low<=M)return; if(low { item=partition(a,low,high); QuickSort(a,low,item-1); QuickSort(a,item+1,high); } //cout<<"theQuickSortiscalled"< } voidInsertSort(inta[],constintlow,constinthigh) { inti,j; inttem;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国科技大学 算法 导论 第一次 实验 报告 综述