欢迎来到天天文库
浏览记录
ID:13772103
大小:55.50 KB
页数:9页
时间:2018-07-24
《排序算法比较系统实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、排序算法比较系统一.项目计划书1.项目的选题意义随着计算机科学技术的快速发展,排序成为了计算机程序设计中的一种重要操作。它在计算机图形、计算机辅助设计、机器人、模式识别及统计学等领域具有广泛应用。在实际应用当中比如数据统计等方面都会用到。而且对一组数据进行排序也方便了后面对数据查找的操作。要知道在一个有序数组中查找和在一个随机无序数组中的查找的时间复杂度和系统消耗是有天壤之别的。它的的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。由于排序法很多,但就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的的环境下使
2、用。一般情况下,采用不同的排序算法效率会不一样。因此,在不同的环境下选择相对效率最高的排序算法,能够有效加快工程实施的进度。为了方便大家了解不同排序算法的时间效率,特建立一种排序算法比较系统,实现比较不同排序算法效率的目的。2.项目的主要内容和目标排序算法比较系统主要实现的下列十种功能:一.简单选择排序;二.折半插入排序;三.直接插入排序;四.冒泡排序;五.希尔排序;六.快速排序;七.归并排序;八.堆排序;九.清屏;十.退出系统;3.项目的技术基础、特点及实施的条件该项目可用C语言实现,适于在单机环境下运行。小组成员均已学习过C语言程序设计、数据结构、算法等课程,具有一定的
3、开发能力。4.项目人员分工所有人都参与了项目的选题、设计、实现及测试工作,项目负责人归纳整理小组成员讨论成果,并确定最终方案。在实践阶段,按照功能模块具体分工如下:项目组负责人:李齐,构建模型、设计算法、设计界面、实现功能二、四、五、六、七、十项目组成员:刘运皇,初始化数据、实现功能一、三、八、九一.设计方案1.算法思想的选择与设计此项目来源于实际问题。通常,在排序的过程中需进行下列两种基本操作:(1)比较两个关键字的大小;(2)将记录从一个位置移动至另一个位置。待排序的记录序列可以用顺序存储结构进行存储,即待排序的一组记录存放在地址连续的一维数组中。在这种存储方式中,记录
4、之间的次序关系由其存储位置决定,则实现排序必须移动记录。因为我们目的要对一系列的正整数进行排序,因此选择顺序存储的方式简洁明了,易于让人理解。而在功能实现过程中,在排序算法比较系统中,要用到递归和分治的思想,以便于算法的设计与实现。我们用库函数来随机生成一系列的正整数,进而选择不同排序算法进行排序比较。其具体实现如下:#includesrand((unsigned)time(NULL));for(longi=0;i<20000;i++){a[i]=rand()%20000;}1.总体设计方案首先构建模型初始化数据;其次,为十种功能设计算法并实现;最后,设计界
5、面,完善系统的人机交互功能。2.详细设计方案(1)算法设计及流程图第一种功能是简单选择排序。其算法思想是对于第一趟,搜索整个数组,寻找出最小的,然后放置在数组的0号位置;对于第二趟,搜索数组的n-1个记录,寻找出最小的(对于整个数组来说则是次小的),然后放置到数组的第1号位置。在第i趟时,搜索数组的n-i+1个记录,寻找最小的记录(对于整个数组来说则是第i小的),然后放在数组i-1的位置(注意数组以0起始)。可以看出,选择排序显著的减少了交换的次数。此种算法的流程图如图1。第二种功能是折半插入排序。其算法思想:基本思想与直接插入排序思想相似,唯一的不同点在于找出插入位置,直
6、接插入排序用的是依次查找,而折半插入排序是用折半查找。此种算法的流程图如图2。第三种功能是直接插入排序。其算法思想是在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。此种算法流程图如图3。第四种功能是冒泡排序。其算法思想是在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。此种算法的流程图如图4。第五种功能是希尔排
7、序。其算法思想是算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。此种算法的流程图如图5。第六种功能是快速排序。其算法思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方
此文档下载收益归作者所有