收藏 分享(赏)

数据结构课程设计54617new.doc

上传人:dreamzhangning 文档编号:2311474 上传时间:2018-09-10 格式:DOC 页数:19 大小:161KB
下载 相关 举报
数据结构课程设计54617new.doc_第1页
第1页 / 共19页
数据结构课程设计54617new.doc_第2页
第2页 / 共19页
数据结构课程设计54617new.doc_第3页
第3页 / 共19页
数据结构课程设计54617new.doc_第4页
第4页 / 共19页
数据结构课程设计54617new.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、课程设计题目:内部排序演示1.问题描述-12.需求分析-13.数据结构设计-14.算法设计-11)概要设计-12)详细设计-25.测试分析-76.总结-87参考文献-98.附录:带注释的源程序-101.问题描述:随着计算机技术的发展,各种排序算法不断的被提出。排序算法在计算机科学中有非常重要的意义,且应用很广泛。在以后的发展中排序对我们的学习和生活的影响会逐渐增大,很有必要学习排序知识。此次课程设计就是运用自己掌握排序的知识,设计一个测试程序比较几种排序算法的关键字比较次数和移动次数以取得直观感受。2.需求分析:(1)实现各种内部排序。包括直接插入排序,希尔排序,冒泡排序,快速排序,直接选择排

2、序,归并排序,堆排序。(2)待排序的元素的关键字为整数或(字符) 。可用随机数据和用户输入数据作测试比较。比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换以 3 次计)。(3)演示程序以人机对话的形式进行。每次测试完毕显示各种比较指标值的列表,以便比较各种排序的优劣。3数据结构设计struct countint compare ;int move ;4.算法设计1)概要设计主程序:int main()初始化;while()接受命令;处理命令;退出;2)详细设计(1)冒 泡 排 序核 心 思 想 : 设排序表中有 n 个数据元素。首先对排序表中第一,二个数据元素的关键字array

3、0和 array1进行比较。如果前者大于后者,则进行交换;然后对第二,三个数据做同样的处理;重复此过程直到处理完最后两个相邻的数据元素。我们称之为一趟冒泡,它将关键字最大的元素移到排序表的最后一个位置,其他数据元素一般也都向排序的最终位置移动。然后进行第二趟排序,对排序表中前 n-1 个元素进行与上述同样的操作,其结果使整个排序表中关键字次大的数据元素被移到 arrn-2的位置。如此最多做 n-1 趟冒泡就能把所有数据元素排好序。核心代码:int array_size=0;void BubleSort(int array, int length)BubleSortCpare = 0 ;Bubl

4、eSortCount.move = 0 ;int tmp;for(int j = length; j1; j-)for(int i =1;iarrayi)tmp = arrayi-1 ;arrayi-1 = arrayi;arrayi = tmp ;BubleSortCount.move+ ;(2)直接插入排序开始时把第一个数据元素作为初始的有序序列,然后从第二个数据元素开始依次把数据元素按关键字大小插入到已排序的部分排序表的适当位置。当插入第 i(1arrayj)tmp = arrayj ;pos = j ;/ SelectedSortCpare += (length-i-1;) if(po

5、s!=i)SelectedSortCount.move + ;int t = arrayi ;arrayi = arraytmp ;arraytmp = t ;(4)快速排序快速排序(Quick Sort)又被称做分区交换排序,这是一种平均性能非常好的排序方法。其算法基本思想是:任取排序表中的某个数据元素(例如取第一个数据元素) 作为基准,按照该数据元素的关键字大小,将整个排序表划分为左右两个子表: 左侧子表中所有数据元素的关键字都小于基准数据元素的关键字。右侧子表中所有数据元素的关键字都大于或等于基准数据元素的关键字,基准数据元素则排在这两个子表中间(这也是该数据元素最终应安放的位置),然后

6、分别对这两个子表重复施行上述方法的快速排序,直到所有的子表长度为 1,则排序结束。核心代码:void QuickSort(int array, int length)QuickSortCpare = 0 ;QuickSortCount.move = 0 ;int low = 0 ;int high = length ;QuickSort(array, low, high) ;void QuickSort(int array, int low, int high)int i,j ;i = low ;j = high ;int temp ;temp = arraylow ;if(i=arrayi)

7、i+;QuickSortCpare+ ;if(i=1)for(i=d;i=0 j=j-d;ShellSortCount.move+ ;arrayj+d = temp;d= d/2; /缩小增量(6)堆排序a 对排序表中的数据元素,利用堆的调整算法形成初始堆。b.输出堆顶元素。c.对剩余元素重新调整形成堆。d.重复执行第 b、c 步,直到所有数据元素被输出。核心代码:(1)建立最大堆的伪代码如下:void filterdown(int array ,const int start, int length)/向下调整使从 start 开始到 currentsize-1 为止的子表成为最大堆int

8、i=start ;int j=2*i+1;/j 为 i 的左孩子int temp=arrayi;while(j=arrayj)break;elsearrayi=arrayj;i=j;j=2*j+1;HeapSortCpare+ ;arrayi=temp;(2)堆排序如果建立的堆满足最大堆的条件,则堆的第一个数据元素 arr0具有最大的关键字,将arr0与 arrn-1对调,把具有最大关键字的数据元素交换到最后,再对前面的 n-1 个数据元素使用堆的调整算法,重新建立最大堆,结果把具有次最大关键字的数据元素又上浮到堆顶,即 arr0的位置,再对调 arr0和 arrn-2,如此反复执行 n-1

9、次,最后得到全部排序好的数据元素序列。void HeapSort(int array, int length)HeapSortCpare = 0 ;HeapSortCount.move = 0 ;int len=length;for(int j=(len-2)/2;j=0;j-)filterdown(array, j, len ); /初始建堆for(int i=len-1;i=1;i-)int tmp ;tmp = array0 ;array0 = arrayi ;arrayi = tmp ;HeapSortCount.move+ ;len-;filterdown(array, 0, len

10、 );/重建最大堆/FindLittleNumberint FindLittle(int array, int length)int little;little = array0 ;for(int i=1; iarrayi)little = arrayi;return little ;5.测试分析:主界面: 生成数组:输出数组:进行排序方式:效能分析:6.总结:在进行为期两个星期的课程设计中,最终完成了算法。这期间,遇到的各种麻烦也都相继解决。从这次实践中,我意识到自己还有很多不足之处。首先先说一下基本的。对于各种排序算法的过程还是不够熟悉,进行编程时还需要翻书查找,对于这一点,只能说对数据结

11、构的学习还不够扎实,虽然说这门课程以后就没有了,但是我想这门课对以后的学习会有很大帮助,所以有空时还应该继续熟悉这门课程。其次,就是对于错误的处理,不能得心应手,不能正确处理一些简单的错误。对于逻辑上的错误,不能够立即找到出错点,往往需要向同学请教才能找出错误,并且改正。我觉得这是自己独自思考能力不高的问题,遇事需要自己仔细想想,若还不能改正,再请教别人也不迟。总而言之,从这次的实践中我学到了很多东西,希望以后能够多加运应。 7、参考文献:1 朱战立编著 数据结构 (语言描述 ) 北京:高等教育出版社20042 严蔚敏等编著 数据结构及应用算法教程 北京:清华大学出版社20013 陈本林等编著

12、 数据结构.南京:南京大学出版社, 20024 赵致琢著 计算科学导论 北京:科学出版社, 20008、带注释的源程序:int main()int* a;int* acopy;char ch=y;while(ch=y)coutselect;switch(select)case 1:system(“cls“);char ch1=0;coutarray_size ;if(array_size0)a = new intarray_size ;acopy = new intarray_size ;while(ch1!=4)system(“cls“) ;coutch1;switch(ch1)case 1:for(int i=0; i=0; i-)*a = i ;a+ ;*acopy = i ;acopy+ ;acopy = acopy-array_size ;a=a-array_size ;couttmp;if(tmp=1)for(int i=0; itmp;switch(tmp)case 1:system(“cls“) ;coutch;return 0 ;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报