ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:82.13KB ,
资源ID:13085003      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13085003.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告--内部排序算法比较Word格式.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、n 8、测试结果21n 9、参考书目24n 10、心得体会24.内部排序算法比较1. 问题描述:任务:试通过随机的数据比较各算法的关键字比较次数和关键字移动次数要求:(1) 对以下 10 种常用的内部排序算法进行比较:直接插入排序、折半插入排序、二路插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序。(2) 待排序表的表长不少于 100;其中的数据要用伪随机数产生程序产生;至少要用 5 组不同的输入数据作比较;比较的指标为有关键字参见的比较次数和关键字移动次数(关键字交换计为 3 次移动)。2. 基本要求:利用随机函数产生 100 个随机整数,利用直接插入排序、折

2、半插入排序、二路插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序十种排序方法进行排序(结果为由小到大的顺序),并统计比较次数 CMPNUM 和关键字移动次数 CHGNUM.3. 测试数据:由随机产生器决定。4. 算法思想:/直接插入排序void InitLinkList(LinkList *L)算法思想:从第二个开始,经后面的关键字以此插入它前面已经有序的表中, 从而得到一个新的、关键字增一的有序表,最终可将关键字全部排好序。/折半插入排序void BInsertSort(LinkList *L,int *CmpNum,int *ChgNum)这是对直接插入排序

3、的改进,在关键字向前面有序表插入时,井陉这般查找,增快查找插入位置的速度。/2-路插入排序void InsertSortBinary(LinkList *L,int *CmpNum,int *ChgNum) 2-路插入排序是在折半插入排序的基础上再改进之,其目的是减少排序过程中移动记录的次数,但为此需要 n 个记录的辅助空间。/希尔排序void ShellInsert(LinkList *L,int dk,int *CmpNum,int *ChgNum)先将整个带排序列分割成为若干个子序列分别进行直接插入排序, 待整个序列中的关键字“基本有序”时,在对全体记录进行一次直接插入排序。/起泡排序v

4、oid BubbleSort(LinkList *L,int *CmpNum,int *ChgNum)这是一种简单的“选择”排序的方法,将前一个关键字和后一个关键字比较,关键字大的和小的交换位置,经过一趟交换便得到了最大关键字, 以此类推,经过 N-1 趟后,便可排序完毕。/快速排序void QuickSort(LinkList *L, int *CmpNum, int *ChgNum)这是对冒泡排序的一种改进,同过一趟排序将待排记录分割成为独立的两部分,其中一部分的关键字均比另一部分小,则可分别对这两部分记录继续这种排序,达到有序。/简单选择排序int SelectMinKey(LinkLi

5、st *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 *Ch

6、gNum)将一维数组中前后相邻的两个有序序列归并为一个有序序列。void /基数排序bases(RedType *h,int *CmpNum, int *ChgNum)void RadixSort(LinkList *L,int *CmpNum, int *ChgNum)这是以静态链表为存储结构的排序算法,通过不断的分配关键字, 收集关键字有序列,最终使整个链表有序。本程序中是把一个五位数拆成五个关键字,对每个关键字都进行一趟分配和一趟收集,当 5 趟下后,序列可排为有序序列。5. 模块划分:模块一:存储结构struct RedType int key;struct RedType *link

7、; /向量结构struct LinkListRedType rMAXSIZE+1; int Length;/链表结构模块二:伪随机数产生函数void RandomNum() int i;srand(2000);for (i = 1; i = MAXSIZE; i+)RandArrayi = (int)rand();模块三:内部排序函数void InitLinkList(LinkList *L);void BInsertSort(LinkList *L,int *CmpNum, int *ChgNum); /折半插入排序void InsertSortBinary(LinkList *L,int

8、*CmpNum, int *ChgNum);/二路插入排序void ShellInsert(LinkList *L, int dk, int *CmpNum, int *ChgNum);希尔排序void BubbleSort(LinkList *L, int *CmpNum, int *ChgNum); 起泡排序int Partition(LinkList *L, int low, int high, int *CmpNum, int *ChgNum); void QuickSort(LinkList *L, int *CmpNum, int *ChgNum);/快速排序int SelectM

9、inKey(LinkList *L, int k, int *CmpNum);/简单选择排序void HeapAdjust(LinkList *L, int s, int m, int *CmpNum, int *ChgNum);void HeapSort(LinkList *L, int *CmpNum, int *ChgNum);void Merge(LinkList *L,int low,int mid,int high,int *CmpNum,int *ChgNum); void MSort(LinkList *L,int low,int high, int *CmpNum,int *

10、ChgNum);void MergeSort(LinkList *L, int *CmpNum, int *ChgNum);/ 归并排序void bases(RedType *h,int *CmpNum, int *ChgNum);void RadixSort(LinkList *L,int *CmpNum, int *ChgNum);/ 基数排序模块四:主函数 main(),实现对函数的测试。6. 流程图:主程序循环 100 次产生 1 组随机数将随机数保存在数组中直接插入折半二路希尔排序起泡快速简单选择堆排序归并基数记录关键字的比较次数和移动次数输出关键字的比较次数、移动次数的平均7. 源

11、程序:#include #include string.htime.hwindows.hwinbase.h #define MAXSIZE 100#define TRUE 1#define FALSE 0#define D 5#define R 10/* R 为基数 */ typedef int BOOL;/*/定义向量结构struct RedType int key;/定义链表结构struct LinkList/*/*函数定义*/随机函数定义int RandArrayMAXSIZE+1; void RandomNum()int i;srand(unsigned)time(0); for (i = 1;/伪随机数产生函数/*/* 排序算法函数定义/ 直接插入排序void InitLinkList(LinkList *L) int i;memset(L, 0, sizeof(LinkList); RandomNum();L-ri.key = RandArrayi; L-Length = i;bool LT(int i, int j, int *CmpNum) (*CmpN

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1