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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

内部排序算法比较实验报告c语言版.docx

1、内部排序算法比较实验报告c语言版题目:编制一个演示内部排序算法比较的程序班级: 姓名: 学号: 完成日期: 一、需求分析1本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。2待排序表的元素的关键字为整数。比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换记为3次移动)。3演示程序以以用户和计算机的对话方式执行,在计算机终端上显示提示信息,对随机数组进行排序,并输出比较指标值。4最后对结果作出简单分析。二、概要设计1可排序表的抽象数据类型定义:ADT OrderableList 数据对象:D=ai|aiIntege

2、rSet,i=1,2,n,n0 数据关系:R1=|ai-1,aiD,i=2,n 基本操作: InitList(n) 操作结果:构造一个长度为n,元素值依次为1,2,,n的有序表。 RandomizeList(d,isInverseOrder) 操作结果:首先根据isInverseOrder为True或False,将表置为逆序或正序,然后将表进行d(0d8)级随机打乱。d为0时表不打乱,d越大,打乱程度越高。RecallList()操作结果:恢复最后一次用RandomizeList随机打乱得到的可排序表。ListLength()操作结果:返回可排序表的长度。ListEmpty()操作结果:若可排

3、序表为空表,则返回Ture,否则返回False。BubbleSort( &c, &s)操作结果:进行起泡排序,返回关键字比较次数c和移动次数s。 InsertSort( &c, &s) 操作结果:进行插入排序,返回关键字比较次数c和移动次数s。 SelectSort ( &c, &s) 操作结果:进行选择排序,返回关键字比较次数c和移动次数s。 QuickSort(&c, &s) 操作结果:进行快速排序,返回关键字比较次数c和移动次数s。 ShellSort(long &c, long &s) 操作结果:进行希尔排序,返回关键字比较次数c和移动次数s。 HeapSort (&c, &s) 操作

4、结果:进行堆排序,返回关键字比较次数c和移动次数s。 ListTraverse(visit() 操作结果:依次对L中的每个元素调用函数visit()。ADT OrderableList2本程序包含两个模块:1)主程序模块void main()初始化;do 接受命令; 处理命令; while(“命令”!=“退出”); 2)可排序表单元模块实现可排序表的抽象数据类型;各模块之间的调用关系如下:主程序模块可排序表单元模块 三、详细设计1根据题目要求和可排序表的基本操作特点,可排序表采用整数顺序表存储结构。/可排序表的元素类型#define MAXSIZE 10000 /用作示例的顺序表的最大长度ty

5、pedef int BOOL;typedef struct int key; /关键字项 RedType; /记录类型typedef struct LinkList RedType rMAXSIZE; int Length; /顺序表长度 LinkList;int RandArrayMAXSIZE;/内部操作void RandomNum() int i; srand(20000); for (i = 0; i MAXSIZE; i+) RandArrayi = (int)rand(); /构建随机序列void InitLinkList(LinkList *L) /建立表 int i; mems

6、et(L, 0, sizeof(LinkList); RandomNum(); for (i = 0; i ri.key = RandArrayi; /赋值 L-Length = i;bool LT(int i, int j, int *CmpNum) /比较i与j大小,返回0或1 (*CmpNum)+; if (i j) return TRUE; else return FALSE;void Display(LinkList *L) /存储表到SortRes.txt文件中 FILE *f; int i; if (f = fopen(SortRes.txt, w) = NULL) printf

7、(cant open filen); exit(0); for (i = 0; i Length; i+) fprintf(f, %dn, L-ri.key); fclose(f);/部分操作的伪码算法/希尔排序void ShellInsert(LinkList *L, int dk, int *CmpNum, int *ChgNum) int i, j; RedType Temp; for (i = dk; i Length; i+) if (LT(L-ri.key, L-ri - dk.key, CmpNum) memcpy(&Temp, &L-ri, sizeof(RedType); f

8、or (j = i - dk; j = 0 & LT(Temp.key, L-rj.key, CmpNum); j -= dk) (*ChgNum)+; memcpy(&L-rj + dk, &L-rj, sizeof(RedType); memcpy(&L-rj + dk, &Temp, sizeof(RedType); void ShellSort(LinkList *L, int dlta, int t, int *CmpNum, int *ChgNum) int k; for (k = 0; k rlow, sizeof(RedType); PivotKey = L-rlow.key;

9、 while (low high) while (low rhigh.key = PivotKey) high-; (*CmpNum)+; (*ChgNum)+; memcpy(&L-rlow, &L-rhigh, sizeof(RedType); while (low rlow.key rhigh, &L-rlow, sizeof(RedType); memcpy(&L-rlow, &Temp, sizeof(RedType); return low;void QSort(LinkList *L, int low, int high, int *CmpNum, int *ChgNum) in

10、t PivotLoc = 0; if (low Length - 1, CmpNum, ChgNum);/堆排序void HeapAdjust(LinkList *L, int s, int m, int *CmpNum, int *ChgNum) RedType Temp; int j = 0; s+; memcpy(&Temp, &L-rs - 1, sizeof(RedType); for (j = 2 * s; j = m; j *= 2) if (j rj - 1.key, L-rj.key, CmpNum) +j; if (!LT(Temp.key, L-rj - 1.key, C

11、mpNum) break; (*ChgNum)+; memcpy(&L-rs - 1, &L-rj - 1, sizeof(RedType); s = j; memcpy(&L-rs - 1, &Temp, sizeof(RedType);void HeapSort(LinkList *L, int *CmpNum, int *ChgNum) int i = 0; RedType Temp; for (i = L-Length / 2-1; i = 0; i-) HeapAdjust(L, i, L-Length, CmpNum, ChgNum); for (i = L-Length; i 1

12、; i-) memcpy(&Temp, &L-r0, sizeof(RedType); (*ChgNum)+; memcpy(&L-r0, &L-ri - 1, sizeof(RedType); memcpy(&L-ri - 1, &Temp, sizeof(RedType); HeapAdjust(L, 0, i - 1, CmpNum, ChgNum); /冒泡排序void BubbleSort(LinkList *L, int *CmpNum, int *ChgNum) int i, j; RedType temp; for (i = 1; i = MAXSIZE; i+) for (j

13、 = 1; j rj.key, L-rj + 1.key, CmpNum) (*ChgNum)+; memcpy(&temp, &L-rj, sizeof(RedType); memcpy(&L-rj, &L-rj + 1, sizeof(RedType); memcpy(&L-rj + 1, &temp, sizeof(RedType); /选择排序int SelectMinKey(LinkList *L, int k, int *CmpNum) int Min = k; for (; k Length; k+) if (!LT(L-rMin.key, L-rk.key, CmpNum) M

14、in = k; return Min;void SelSort(LinkList *L, int *CmpNum, int *ChgNum) int i, j; RedType temp; for (i = 0; i Length; i+) j = SelectMinKey(L, i, CmpNum); if (i != j) (*ChgNum)+; memcpy(&temp, &L-ri, sizeof(RedType); memcpy(&L-ri, &L-rj, sizeof(RedType); memcpy(&L-rj, &temp, sizeof(RedType); 3函数的调用关系图

15、反映了演示程序的层次结构:mainsrandBubbleSort InsertSort SelectSort QuickSort ShellSort HeapSortInitLinkList RandomNum LT Display四、调试分析1对正序、逆序和若干不同程度随机打乱的可排序表,进行各种排序方法的比较测试,得到的测试数据具有较好的典型性和可比较性。通过设计和实现指定程序的随机乱序算法,对伪随机数序列的产生有了具体的认识和实践。2将排序算法中的关键字比较和交换分别由Less和Swap两个内部操作实现,较好的解决了排序算法的关键字比较次数和移动次数的统计问题。而赋值是直接统计的。3本实

16、习作业采用循序渐进的策略,首先设计和实现可排序表的建立和随机操作,然后用插入排序验证各种内部辅助操作的正确性,进而逐个加入其他排序算法,最后完成对测试结果的显示。调试能力有了提高。五、用户手册1本程序的运行环境为DOS操作系统,执行文件为:内部排序算法比较.exe。2进入程序后即显示文本方式的用户界面:3输入1回车,即得直接插入排序的排序结果及其关键字比较次数和移动次数及时间输入2回车,即得希尔排序的排序结果及其关键字比较次数和移动次数及时间输入3回车,即得快速排序的排序结果及其关键字比较次数和移动次数及时间输入4回车,即得堆排序的排序结果及其关键字比较次数和移动次数及时间输入5回车,即得冒泡

17、排序的排序结果及其关键字比较次数和移动次数及时间输入6回车,即得选择排序的排序结果及其关键字比较次数和移动次数及时间输入7回车,即得以上所有排序的排序结果及其关键字比较次数和移动次数及时间输入8回车,即退出该程序六、测试结果对结果的截屏如下:对各种表长和测试组数进行了测试,程序运行正常。分析实测得到的数值,6种排序算法(快速排序采用“比中法”)的特点小结如下:测试插入排序希尔排序快速排序堆排序冒泡排序选择排序比较次数第三多越乱(逆)越多少乱否差异小少乱否差异小稍多乱否差异很小最多越乱(逆)越多越乱(逆)越多第二多与乱否无关移动次数第二多越乱(逆)越多约为快速排序的两倍第二少乱否差异较小稍多乱否

18、差异很小最多越乱(逆)越多最少正和逆序少七、附录源程序文件名清单:052376_李明_内部排序算法比较.cpp /主程序#include #include #include #include #include #include #define MAXSIZE 5000#define TRUE 1#define FALSE 0typedef int BOOL;typedef struct int key; RedType;typedef struct LinkList RedType rMAXSIZE+1; int Length; LinkList;int RandArrayMAXSIZE+1;

19、void RandomNum() int i; srand(2000); for (i = 1; i = MAXSIZE; i+) RandArrayi = (int)rand();void InitLinkList(LinkList *L) int i; memset(L, 0, sizeof(LinkList); RandomNum(); for (i = 1; i ri.key = RandArrayi; L-Length = i;bool LT(int i, int j, int *CmpNum) (*CmpNum)+; if (i j) return TRUE; else retur

20、n FALSE;void Display(LinkList *L) FILE *f; int i; if (f = fopen(SortRes.txt, w) = NULL) printf(cant open filen); exit(0); for (i = 0; i Length; i+) fprintf(f, %dn, L-ri.key); fclose(f);/希尔排序void ShellInsert(LinkList *L, int dk, int *CmpNum, int *ChgNum) int i, j; RedType Temp; for (i = dk; i Length;

21、 i+) if (LT(L-ri.key, L-ri - dk.key, CmpNum) memcpy(&Temp, &L-ri, sizeof(RedType); for (j = i - dk; j = 0 & LT(Temp.key, L-rj.key, CmpNum); j -= dk) (*ChgNum)+; memcpy(&L-rj + dk, &L-rj, sizeof(RedType); memcpy(&L-rj + dk, &Temp, sizeof(RedType); void ShellSort(LinkList *L, int dlta, int t, int *Cmp

22、Num, int *ChgNum) int k; for (k = 0; k rlow, sizeof(RedType); PivotKey = L-rlow.key; while (low high) while (low rhigh.key = PivotKey) high-; (*CmpNum)+; (*ChgNum)+; memcpy(&L-rlow, &L-rhigh, sizeof(RedType); while (low rlow.key rhigh, &L-rlow, sizeof(RedType); memcpy(&L-rlow, &Temp, sizeof(RedType)

23、; return low;void QSort(LinkList *L, int low, int high, int *CmpNum, int *ChgNum) int PivotLoc = 0; if (low Length - 1, CmpNum, ChgNum);/堆排序void HeapAdjust(LinkList *L, int s, int m, int *CmpNum, int *ChgNum) RedType Temp; int j = 0; s+; memcpy(&Temp, &L-rs - 1, sizeof(RedType); for (j = 2 * s; j =

24、m; j *= 2) if (j rj - 1.key, L-rj.key, CmpNum) +j; if (!LT(Temp.key, L-rj - 1.key, CmpNum) break; (*ChgNum)+; memcpy(&L-rs - 1, &L-rj - 1, sizeof(RedType); s = j; memcpy(&L-rs - 1, &Temp, sizeof(RedType);void HeapSort(LinkList *L, int *CmpNum, int *ChgNum) int i = 0; RedType Temp; for (i = L-Length / 2-1; i = 0; i-) HeapAdjust(L, i, L-Length, CmpNum, ChgNum); for (i = L-Length; i 1; i-) memcpy(&Temp, &L-r0, sizeof(RedType); (*ChgNum)+; memcpy(&L-r0, &L-ri - 1, sizeof(RedType); memcpy(&L-ri - 1

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

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