实验7:-内部排序算法比较.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验7:-内部排序算法比较

实验7: 内部排序算法比较 问题描述 程序对以下4种内部排序(冒泡排序、直接插入排序、简单选择排序、快速排序)算法进行实测比较,测试各种算法在对同样的数据排序时的比较次数和移动次数。 二、输入与输出 输入:根据用户需要输入待排表的表长(100至1000)和不同测试数据的组数 (8至18),不输入则按照默认值进行测试 输出:每次测试完毕,列表显示各种比较指标值:比较次数和移动次数 需求分析 1.本演示程序对以下4种常见的内部排序算法进行实测比较:冒泡排序、直接插入排序、简单选择排序、快速排序 2.待排序表的元素的关键字为整数。用正序、逆序和不同乱序程度的不同数据做测试比较。比较的指标为由关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动) 3.演示程序以用户和计算机的对话方式执行,即在计算机终端上菜单,根据用户需要输入待排表的表长(100至1000)和不同测试数据的组数(8至18),不输入则按照默认值进行测试。 四、开发工具与环境 硬件设备:微型计算机系统 软件环境:操作系统Windows,开发工具Devc++ 五、功能分析 存储结构 typedef int Typekey; typedef struct { Typekey key; }Type; typedef struct { Type r[MAXSIZE+1];//顺序表 int length; }PList;//排序表 函数一览表 int OneTimeSqCreate(PList L) /*手动输入创建排序序列函数*/ int ManyTimeSqCreate(PList L,int m) /*自动生成排序序列函数*/ void BubbleSort(PList L) /*冒泡排序*/ void InsertSort(PList L) /*插入排序*/ void SelectSort(PList L) /*简单选择排序*/ int Partition(PList L,int low,int high) /*一次快速排序*/ void QSort(PList L,int low,int high) /*递归形式的快速排序算法*/ void QuickSort(PList L) /*快速排序*/ 六、程序代码 #include iostream #include malloc.h #include stdlib.h #include time.h #define MAXSIZE 10000 using namespace std; typedef int Typekey; int compCount; //关键字的比较次数 int shiftCount; //关键字的移动次数 typedef struct { Typekey key; }Type; typedef struct { Type r[MAXSIZE+1];//顺序表 int length; }PList;//排序表 int OneTimeSqCreate(PList L){//手动输入创建排序序列函数 int x,h; for ( x=1; 1; x++) { cinh; L.r[x].key=h ; if(getchar()==\n){//只读入一行,换行则终止 break; } } L.length=x; } int ManyTimeSqCreate(PList L,int m){//自动生成排序序列函数 L.length=m; for (int x=1; x=m; x++) { L.r[x].key= rand() % m;//随机数的取值范围为0~k } return 1; } void BubbleSort(PList L) {//冒泡排序 int i,j,l,m=0,n=0; for(i=1;i=L.length-1;++i){//只需要比较length-1次 for(j=1;j=L.length-i;++j){//内层循环所谓的冒泡,将最大值放到末尾 ++m;//比较次数 if(L.r[j].keyL.r[j+1].key){ l=L.r[j].key; L.r[j].key=L.r[j+1].key; L.r[j+1].key=l; n+=3;//关键字移动次数 } } } coutendl 冒泡排序:; cout比较次数:m;

文档评论(0)

138****7331 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档