收藏 分享(赏)

内部排序算法比较.doc

上传人:HR专家 文档编号:8482961 上传时间:2019-06-29 格式:DOC 页数:12 大小:400.37KB
下载 相关 举报
内部排序算法比较.doc_第1页
第1页 / 共12页
内部排序算法比较.doc_第2页
第2页 / 共12页
内部排序算法比较.doc_第3页
第3页 / 共12页
内部排序算法比较.doc_第4页
第4页 / 共12页
内部排序算法比较.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、内部排序算法比较班级: 姓名: 学号: 完成日期:题目:试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。一需求分析1.对常用的 6 种内部排序算法进行比较:冒泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。2.待排序表的表长不小于 100;其中的数据要用伪随机数产生程序产生;至少要用 5 组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为 3 次移动)3.最后要对结果作出简单分析,包括对各组数据得到结果波动大小的解释。二概要设计1.主界面设计对六种内部排序算法进行比较,可通过随机数程序产生几组数,要求用户手动输

2、入产生随机数的个数。运行界面如图所示:选择 1 运行程序,选择 2 退出程序2存储结构设计本程序采用顺序表结构,具体结构定义如下:typedef struct int key; ElemType;typedef struct ElemType *elem;int length;SqList;3.系统功能设计1)分配内存空间。创建顺序表2)利用伪随机数产生程序产生随机数,作为程序运行的数据3)实现每种排序算法的功能函数三模块设计1.模块设计主程序模块2.系统子程序及功能设计本系统共设置 13 个函数,其中包括主函数。各函数名及功能说明如下。1) void addlist(SqList ElemT

3、ype;typedef struct ElemType *elem;int length;SqList;2.全局变量定义int bj1=0,yd1=0,bj2=0,yd2=0,bj3=0,yd3=0,bj4=0,yd4=0,bj5=0,yd5=0,bj6=0,yd6=0;/记录每种算法的比较,移动次数int n;/随机数的个数2.系统主要子程序详细设计(1)主函数设计模块主要是输入数据,以及程序界面的设计,调用系统的各个子程序,并输出结果。 (详见源程序)(2)随机数产生模块利用伪随机数产生程序产生数据,并存储到顺序表中。void random(SqList static bool first

4、=true;if(first)srand(time(0);first=false;/使每次产生的随机数不同for(int i=1;i30000)goto a;+L.length;(3)排序算法模块实现冒泡排序,直接插入排序,简单选择排序,快速排序,希尔排序以及堆排序的算法。(祥见源程序)五测试分析运行程序后,得到如图所示:输入:1输入:100选择 1 重复上述步骤,输入 150,200,250,300 得到另外四个结果:退出程序,请选择:2结果分析:冒泡排序,直接插入排序以及简单选择排序比较次数较多,快速排序,希尔排序及堆排序比较次数较少;并可得冒泡排序和直接插入排序相对较稳定,其他四种内部排

5、序为不稳定排序。六源程序清单#include“iostream“#include“stdio.h“#include“stdlib.h“#include“string.h“#include“time.h“using namespace std;#define LIST_INIT_SIZE 50000int bj1=0,yd1=0,bj2=0,yd2=0,bj3=0,yd3=0,bj4=0,yd4=0,bj5=0,yd5=0,bj6=0,yd6=0,n;/yd,bj 为记录关键字比较和移动的次数typedef struct int key; ElemType;typedef struct Elem

6、Type *elem;int length;SqList;void addlist(SqList scanf(“%d“,if(n50000)printf(“超出范围重新输入!n“);goto a;L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);if(!L.elem)exit(0);void random(SqList static bool first=true;if(first)srand(time(0);first=false;/使输入相同个数时每次产生的随机数不同for(int i=1;i30000)goto a;+L.l

7、ength;void memory(SqList for(int i=1;iL.elemj+1.key)L.elem0.key=L.elemj.key;L.elemj.key=L.elemj+1.key;L.elemj+1.key=L.elem0.key;yd1+=3;void InsertSort(SqList for(i=2;i=pivotkey)-high;L.elemlow=L.elemhigh;bj4+;yd4+;while (lowL.elemj.key)k=j;bj5+;if(i!=k)L.elem0.key=L.elemi.key;L.elemi.key=L.elemk.key

8、;L.elemk.key=L.elem0.key;yd5+=3;w+;d=d/2;w=1;void HeapAdjust(SqList rc.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);if(!rc.elem)exit(0);int j;rc.elem0=L.elems;for(j=2*s;j0;-i)HeapAdjust(L,i,L.length);for(i=L.length;i1;-i)L.elem1=L.elemi;yd6+=3;HeapAdjust(L,1,i-1);void main()SqList L,M;int

9、a;M.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);if(!M.elem)exit(0);a:cout“ -内部排序算法比较-n“; cout“*欢迎使用*n“;cout“*(1)运行程序*n“;cout“*(2)退出系统*n“;coutendl;cout“请选择:“;scanf(“%d“,switch(a)case 1:system(“cls“);addlist(L);break;case 2:cout“谢谢使用“;exit(0);break;random(L);memory(M,L);BubbleSort(M);memory

10、(M,L);InsertSort(M);memory(M,L);SelectSort(M);memory(M,L);QuickSort(M);memory(M,L);ShellSort(M);memory(M,L);HeapSort(L);cout“ *比较次数*移动次数*n“;cout“冒泡排序: “bj1“ “yd1endl;cout“直接插入: “bj2“ “yd2endl;cout“简单选择: “bj3“ “yd3endl;cout“快速排序: “bj4“ “yd4endl;cout“希尔排序: “bj5“ “yd5endl;cout“堆排序 : “bj6“ “yd6endl;coutendl;goto a;七用户手册(1)本程序执行文件为“内部排序算法比较.exe” 。(2)采用伪随机数程序产生随机数作为排序的数据。(3)用户只需按提示选择程序功能,并输入随机数个数即可得到结果,而且可以选择继续运行程序或者退出程序。

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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