寻找众数问题实验报告_第1页
寻找众数问题实验报告_第2页
寻找众数问题实验报告_第3页
寻找众数问题实验报告_第4页
寻找众数问题实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、算法设计与分析上 机 实 验 报 告专 业 软件工程班 级 1101班学 号 学生姓名 岳彦利完成日期 2013-10-241. 上机题目及实验环境1.1上机题目:众数问题1.2实验环境:CPU:英特尔 第二代酷睿i3-2330M 2.2GHz 双核内存:4G操作系统:window s 7软件平台:ubuntu2. 算法设计与分析 1. 用快速排序把随机生成的一组数排序放到数组中。 2.把排好的数组用下标按次序逐个比较,如果相等就用count=count+1,设个标记的flag,将count赋给flag,不相等就count=1,下标相加,循环,直到最后一个数。 3.在把最后比较的数放到x中,最

2、终输出次数最多的数x和它的次数flag.3. 核心代码/快速排序递归,a代表数组,low代表数组的第一个数的下标,high代标数组最后一个数的下标int Partition(int a,int low,int high) int x=alow;/将数组的第一个数赋给x while(low=x & lowhigh)/从后往前找比x小的数 high-; if(lowhigh) alow=ahigh;/从后往前找到比x小的数赋给alow low+; while(alowx & lowhigh)/从前往后找比x大的数 low+; if(lowhigh) ahigh=alow;/从前往后找比x大的数赋给

3、ahigh high-; alow=x; return low;/开速排序void QuickSort(int a,int low,int high) if(lowhigh) int pos=Partition(a,low,high);/递归调用 QuickSort(a,low,pos-1); QuickSort(a,pos+1,high); /查找众数void findmode(int a,int n) int count=1,flag=1,flag1=0; int i=0,x,x1; while(iflag) flag=count; x=ai; else count=1; i+; prin

4、tf(output put:n);if(flag=1)printf(没有众数!n);else if(flag=flag1) printf(众数是:%d,%dn出现的次数都是:%dn,x,x1,flag);else printf(%dn%dn,x,flag);4. 运行与调试 图一.当没有众数的错误情况 图二.没有众数的正确情况 图三.输出含有两个众数错误情况 图四.输出含有两个众数正确的情况 图五.输出含有1个众数的情况5. 结果分析和小结(1)如图一,是因为没有考虑到count=1时要输出的输出的数,所以输出的是一个垃圾数据,后来,加了一个标志flag,如果flag没有变就代表数组中没有众数

5、,修改后如图二。 如图二,没有考虑到1,1,2,2,3的那种情况,每次就能输出1,后来在比较countflag前比较一下相等,再把2的值赋给另一个数,最后把两种情况都输出就可以了,修改后如图四。如图五:从键盘输入的8代表要随机生成随机数的个数,output number:代表从文件中读出的数,第一个数是总随机个数,剩下的是产生的随机数,最下面两行5众数,4代表5出现的次数。(2)让我更熟悉分治法,对快速排序有了更深的理解,在写的过程中出现了段错误,调试了好久才发现是因为定义出了错,感觉自己需要学习的太多了,只有上机编写才能发现自己真正的问题,除此之外感觉编程也很有趣。附录(C/C+源代码)#i

6、nclude#include#include#include#include/快速排序递归,a代表数组,low代表数组的第一个数的下标,high代标数组最后一个数的下标int Partition(int a,int low,int high) int x=alow;/将数组的第一个数赋给x while(low=x & lowhigh)/从后往前找比x小的数 high-; if(lowhigh) alow=ahigh;/从后往前找到比x小的数赋给alow low+; while(alowx & lowhigh)/从前往后找比x大的数 low+; if(lowhigh) ahigh=alow;/从

7、前往后找比x大的数赋给ahigh high-; alow=x; return low;/开速排序void QuickSort(int a,int low,int high) if(lowhigh) int pos=Partition(a,low,high);/递归调用 QuickSort(a,low,pos-1); QuickSort(a,pos+1,high); /查找众数void findmode(int a,int n) int count=1,flag=1,flag1=0; int i=0,x,x1; while(iflag) flag=count; x=ai; else count=

8、1; i+; printf(output put:n);if(flag=1)printf(没有众数!n);else if(flag=flag1) printf(众数是:%d,%dn出现的次数都是:%dn,x,x1,flag);else printf(%dn%dn,x,flag);main() FILE *fp; int i,d; int n; if(fp=fopen(input.txt,wt)=NULL) printf(fail to open file!n); exit(1); printf(Input number n:n); scanf(%d,&n); int an; fprintf(fp,%dn,n);/将n写入文件 srand(int)time(0);/将产生的随机数在下次时打乱顺序 for(i=0;in;i+) ai=1+(int)(10.0*rand()/(RAND_MAX+1.0);/将产生的随机数写入数组 fprintf(fp,%dn,ai);/将产生的随机数写入文件 fclose(fp); fp=fopen(input.txt,rt);/将结果写入文件 printf(output number:n); i=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论