数据结构课程设计报告--内部排序算法比较.doc

数据结构课程设计报告--内部排序算法比较.doc

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》课程设计报告 专 业: 班 级: 姓 名: 学 号: 完成日期: 二0一0年 12月29日 目录 1、问题描述………………………………………..3 2、基本要求……………………………………….3 3、测试数据………………………………………3 4、算法思想………………………………………4 5、模块设计………………………………………5 6、流程图…………………………………………6 7、源程序…………………………………………7 8、测试结果………………………………………..21 9、参考书目……………………………………….24 10、心得体会………………………………………24. 内部排序算法比较 1.问题描述: 任务: 试通过随机的数据比较各算法的关键字比较次数和关键字移动次数 要求: (1)对以下10种常用的内部排序算法进行比较:直接插入排序、折半插入排序、二路插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序。 (2)待排序表的表长不少于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参见的比较次数和关键字移动次数(关键字交换计为3次移动)。 2.基本要求: 利用随机函数产生100个随机整数,利用直接插入排序、折半插入排序、二路插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序十种排序方法进行排序(结果为由小到大的顺序),并统计比较次数CMPNUM和关键字移动次数CHGNUM. 3.测试数据: 由随机产生器决定。 4.算法思想: //直接插入排序 void InitLinkList(LinkList *L) 算法思想:从第二个开始,经后面的关键字以此插入它前面已经有序的表中,从而得到一个新的、关键字增一的有序表,最终可将关键字全部排好序。 //折半插入排序 void BInsertSort(LinkList *L, int *CmpNum, int *ChgNum) 算法思想:这是对直接插入排序的改进,在关键字向前面有序表插入时,井陉这般查找,增快查找插入位置的速度。 ?//2-路插入排序 void InsertSortBinary(LinkList *L, int *CmpNum, int *ChgNum) 算法思想:?2-路插入排序是在折半插入排序的基础上再改进之,其目的是减少排序过程中移动记录的次数,但为此需要n个记录的辅助空间。void ShellInsert(LinkList *L, int dk, int *CmpNum, int *ChgNum) 算法思想:先将整个带排序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的关键字“基本有序”时,在对全体记录进行一次直接插入排序。 //起泡排序 void BubbleSort(LinkList *L, int *CmpNum, int *ChgNum) 算法思想:这是一种简单的“选择”排序的方法,将前一个关键字和后一个关键字比较,关键字大的和小的交换位置,经过一趟交换便得到了最大关键字,以此类推,经过N-1趟后,便可排序完毕。 //快速排序 void QuickSort(LinkList *L, int *CmpNum, int *ChgNum) 算法思想:这是对冒泡排序的一种改进,同过一趟排序将待排记录分割成为独立的两部分,其中一部分的关键字均比另一部分小,则可分别对这两部分记录继续这种排序,达到有序。 //简单选择排序 int SelectMinKey(LinkList *L, int k, int *CmpNum) 算法思想:对待排记录进行N-1次选择,分别选出第1至第N-1大的关键字,序列变为有序了。每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录 //堆排序 void HeapSort(LinkList *L, int *CmpNum, int *ChgNum) 算法思想:将待排序列排成按二叉树形式存储,使所有非终结节点的治军不大于其左右孩子的值,输出堆顶的最小元素,再将其余排成堆,以此类推,可一次选出次小的元素,最终能够排好序。 //归并排序 void MergeSort(LinkList *L, int *CmpNum, int *ChgNum) 算法思想:将一维数组中前后相邻的两个有序序列归并为一个有序序

文档评论(0)

ze122230743 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档