实验五排序算法设计和比较
更新时间:2024-01-03 07:06:01 阅读量: 教育文库 文档下载
实验五 排序算法设计和比较
一、【实验内容与要求】
问题描述:利用直接插入排序、冒泡排序、快速排序对数列进行排序。
基本要求:
(1) 能随机生成30个值为0到100的数。
(2) 用于排序的输入数列可以是要求(1)中随机生成的,也可以是键盘
输入。
(3) 输出结果为利用三种方法排序后的结果,并能显示三种算法时间、空
间性能参数值。
【测试数据】
由随机自行生成若干个数,进行排序。
二、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等) 1) 符号说明:
m1,m2,m3 代表三种排序法的循环次数 a[],b[],c[] 分别用来存储三次排序的数据 temp 中间变量
n 参与排序的数字个数 maopao(a,n) 冒泡程序排序 zhicha(b,n) 直接插入排序 quick(a,h,l) 快速排序法 h 分块排序的上限 l 分块排序的下限
2) 程序说明(结构,输入输出)
这个程序整个流程比较自然,一脉相传,即先输入要排序的个数,然后选择要输入的方式,将产生的数传到数组中,然后依次地用冒泡子程序,直接插入的程序,快速排序的方法,依次排序,并将排好的数输出,以及算法的时间复杂率。
3)程序流程图
同时将得到的数同步传到数组b[],c[];为下面各种排序做准备 选择输入方式k? K=1 调用随机数函数,由随机产生n个数 初始化函数,根据提示语句,输入要参加数字个数n START K=2 调用键盘输入函数,由键盘输入要比较的数(n个数)
调用直接插入子程序重复上面操作,输出结果。 调用冒泡排序的子程序,传输参数,排序从大到小,并计算循环的次数,将结果输出 调用快速排序子程序,重复操作,输出结果。 END 三、源程序及注释:
#include\#include\
int m1=0;全局变量定义冒泡法循环的次数
int m2=0; 全局变量定义直接插入法循环的次数 int m3=0; 全局变量定义快速法循环的次数 int suiji(int a[],int n) ;随机生成目的数函数 { int i,j,temp;
srand((unsigned)time(NULL)); srand播下一个种子 for(i=0;i jianpan(int a[],int n) 键盘输入目的数函数 { int i,j,k,l; for(i=0;i maopao(int a[],int n) 冒泡法排序程序 { int i,j,temp; for(i=0;i for(j=1;j<(n-i);j++) ;具体的排序过程 {if(a[j]>a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } m1++; 计算循环次数 } printf(\ for(i=0;i zhicha(int b[],int n) 直接插入排序子程序 { int i,j,temp; printf(\ for(i=1;i quick(int c[],int l,int h) 快速排序法 { int temp; int i,j,k; i=l;j=h; if(l { int i,j,k,n; int a[100],b[100],c[100]; 定义三个数组来存放三种方法的数字 clrscr(); 清屏函数 printf(\ scanf(\ 输入要参与排序的数目 printf(\ scanf(\选择输入的方式 if(k==1) k=1 则调用随机函数调用 {suiji(a,n);} if(k==2) k=2 则调用键盘输入函数 { jianpan(a,n); } for(i=0;i maopao(a,n); 调用冒泡法程序 zhicha(b,n); 调用直接插入排序 printf(\ quick(c,0,n-1); 调用快速排序法 for(i=0;i { printf(\ %d\ if((i+1)%5==0) printf(\ } printf(\ getchar(); getchar(); }?? 四、运行输出结果: 五、调试和运行程序过程中产生的问题及采取的措施: 在写程序的过程思路比较清晰,遇到的困难主要是编程软件的不兼容,或是某些c语言规则在一些软件上为非法的,早先我用的一直用地是devC++,但是在用随机生成数子函数,一直提示有错误,改正不了,最后只好用最原始的turbo C问题解决了,发现最好用的还是tc啊,以后只用突出(我电脑一直装不了vc++,不知道怎么回事),在具体编程中需要考虑的是函数形参和实参的格式,一定要一致。 六、对算法的程序的讨论、分析,改进设想,其它经验教训: 这次程序中主要用三种排序方法:a。冒泡排序b直接插入排序c。快速排序。其中 冒泡排序的时间复杂度:O(n2) 空间复杂度:O(1) 直接插入排序时间复杂度:O(n2) 空间复杂度:O(1) 序法 冒泡排序 快速排序 选择排序 二叉树排序 插入排序 最差时间分析 O(n2) O(n2) O(n2) O(n2) O(n2) 平均时间复杂度 O(n2) O(n*log2n) O(n2) O(n*log2n) O(n2) 稳定度 稳定 不稳定 稳定 不一顶 稳定 空间复杂度 O(1) O(log2n)~O(n) O(1) O(n) O(1) 六、对算法的程序的讨论、分析,改进设想,其它经验教训: 这次程序中主要用三种排序方法:a。冒泡排序b直接插入排序c。快速排序。其中 冒泡排序的时间复杂度:O(n2) 空间复杂度:O(1) 直接插入排序时间复杂度:O(n2) 空间复杂度:O(1) 序法 冒泡排序 快速排序 选择排序 二叉树排序 插入排序 最差时间分析 O(n2) O(n2) O(n2) O(n2) O(n2) 平均时间复杂度 O(n2) O(n*log2n) O(n2) O(n*log2n) O(n2) 稳定度 稳定 不稳定 稳定 不一顶 稳定 空间复杂度 O(1) O(log2n)~O(n) O(1) O(n) O(1)
正在阅读:
实验五排序算法设计和比较01-03
安全管理是供电企业的生命线通用范本04-18
重庆市劳动和社会保障局关于用人单位不按规定进行社会保险登记不如实申报参保人员和缴费工资的处理意见10-28
2022年南昌大学材料科学基础考研复试核心题库之计算题精编04-12
秦朗:某培训机构暑假招生策划书08-15
2016讽刺人脸皮厚的话02-10
工程造价审计与审核有何区别12-14
海洋工程装备科研项目指南(2013年版)word版12-24
西藏提前退休政策的影响分析09-18
交通行业提前退休工种范围表(特繁)03-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 算法
- 排序
- 实验
- 比较
- 设计
- 土方开挖方案 - 图文
- 配套K12河北省蠡县中学2018-2019学年高二地理10月月考试题
- 电气装置行业分析调研及投资前景分析报告2019年目录
- 浙江省七彩联盟2018届高三上学期期中考试地理试题 含解析
- 求职简历
- 矿山建设工程课程设计指导
- 安装工长考试试题91分
- 《关于进一步规范律师行业行为的,实施办法》
- 2012学年第一学期三年级语文期末诊断练习
- 《多元统计分析》第三版例题习题数据文件
- 工艺流程
- 《思想政治学科知识与教学能力》(高级中学)
- 江西职业院校技能大赛 - 图文
- 人教版五年级下册数学第四单元分数练习题
- 微机(第四版)戴梅萼 第三章 习题答案
- 李中莹第50期NLP执行师12天笔记 超详细(上)
- 灵石二中课堂改革的具体做法和成功经验
- 国际3班班规
- 道教系统诸神仙位宝诰全谱 - 图文
- 《铁道工程》期末考试复习题及答案解析