数据结构实验报告——排序(共11页).docx
《数据结构实验报告——排序(共11页).docx》由会员分享,可在线阅读,更多相关《数据结构实验报告——排序(共11页).docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上1实验要求【实验目的】 学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。【实验内容】使用简单数组实现下面各种排序算法,并进行比较。排序算法: 1、插入排序 2、希尔排序3、冒泡排序4、快速排序5、简单选择排序6、堆排序(选作)7、归并排序(选作)8、基数排序(选作)9、其他要求: 1、测试数据分成三类:正序、逆序、随机数据2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)4、对2和3的结果进行分析,验证上述各种算法的
2、时间复杂度编写测试main()函数测试线性表的正确性。2. 程序分析2.1 存储结构 存储结构:数组r1r2 ri-1 ri ri+1 rn有序区 无序区 图8-1 直接插入排序的基本思想图解插入到合适位置2.2 关键算法分析/插入排序void InsertSort(int r, int n)int count1=0,count2=0;for (int i=2; in; i+) r0=ri; /设置哨兵for (int j=i-1; r0rj; j-) /寻找插入位置rj+1=rj; /记录后移rj+1=r0;count1+;count2+;for(int k=1;kn;k+)coutrk ;
3、coutendl;cout比较次数为 count1 移动次数为 count2=1; d=d/2) /以增量为d进行直接插入排序for (i=d+1; i0 & r0rj; j=j-d)rj+d=rj; /记录后移d个位置rj+d=r0;count1+;count2=count2+d;count1+;for(i=1;in;i+)coutri ;coutendl;cout比较次数为 count1 移动次数为 count2endl;r1r2 ri-1 ri ri+1 rn有序区 无序区 图8-1 直接插入排序的基本思想图解插入到合适位置/起泡排序void BubbleSort(int r, int
4、n)int temp;int exchange;int bound;int count1=0,count2=0; exchange=n-1; /第一趟起泡排序的范围是r1到rnwhile (exchange) /仅当上一趟排序有记录交换才进行本趟排序bound=exchange; exchange=0; for(int j=0;jrj+1) temp=rj;/交换rj和rj+1rj=rj+1;rj+1=temp;exchange=j;/记录每一次发生记录交换的位置count2=count2+3;/移动了3次for(int i=1;in;i+)coutri ;coutendl;cout比较次数为
5、 count1 移动次数为 count2endl;/快速排序一次划分int Partition(int r, int first, int end,int &count1,int &count2)int i=first; /初始化 r1 ri-1 ri ri+1 rn 均ri 轴值 均ri 位于最终位置 图8-6 快速排序的基本思想图解int j=end;int temp; while (ij) while (ij & ri= rj)j-; /右侧扫描count1+;count1+;if (ij) temp=ri; /将较小记录交换到前面ri=rj;rj=temp;i+; count2=cou
6、nt2+3;while (ij & ri= rj) i+; /左侧扫描count1+;count1+;if (ij)temp=rj;rj=ri;ri=temp; /将较大记录交换到后面j-; count2=count2+3; return i; /i为轴值记录的最终位置/快速排序void QuickSort(int r, int first, int end,int &count1,int &count2)if (firstend) /递归结束int pivot=Partition(r, first, end,count1,count2); /一次划分QuickSort(r, first, p
7、ivot-1,count1,count2);/递归地对左侧子序列进行快速排序QuickSort(r, pivot+1, end,count1,count2); /递归地对右侧子序列进行快速排序r1 r2 ri-1 ri ri+1 rmin rn 有序区 无序区 已经位于最终位置 rmin为无序区的最小记录 图8-9 简单选择排序的基本思想图解交换/简单选择排序void SelectSort(int r , int n) int i;int j;int index;int temp;int count1=0,count2=0; for (i=0; in-1; i+) /对n个记录进行n-1趟简单
8、选择排序 index=i; for(j=i+1;jn;j+)/在无序区中选取最小记录count1+;/比较次数加一 if(rjrindex)/如果该元素比现在第i个位置的元素小index=j;count1+;/在判断不满足循环条件jn时,比较了一次 if(index!=i) temp=ri;/将无序区的最小记录与第i个位置上的记录交换 ri=rindex; rindex=temp;count2=count2+3;/移动次数加3 for(i=1;in;i+)coutri ;coutendl; cout比较次数为 count1 移动次数为 count2endl;/筛选法调整堆void Sift(i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 排序 11
限制150内