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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(查找数组元素的最大值和最小值众数问题Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

查找数组元素的最大值和最小值众数问题Word格式.docx

1、 采用同样的处理方法递归处理以分好的数据集。2.1.2 细节处理: 数组的大小为,n=0,1,2,3. 数组中的数字随机产生,数字的范围为1100; 静态全局变量:max的初值为0,min的初值为101。2.2 众数问题2.2.1 快速排序算法: 设置两个变量i、j,排序开始的时候:i=left,j=right+1; 以第一个数组元素作为关键数据,赋值给temp,即temp=arrayleft; 从j开始向前搜索,即由后开始向前搜索(-j),找到第一个小于temp的值arrayj; 从i开始向后搜索,即由前开始向后搜索(+i),找到第一个大于temp的arrayi; 交换arrayi和arra

2、yj的值; 重复搜索步骤,直到i=j; 将temp的值和arrayj的值交换,并以此为界,分别在对左右两边进行快速排序。3. 核心代码3.1 查找最值3.1.1 流程图(如图1)(核心函数为void MaxAndMin(int arrayN, int left, int right): 图1.查找最值的流程图3.1.2 核心代码如下:(注:max和min是静态全局变量)void MaxAndMin(int arrayN, int left, int right) / 求最大值最小值函数,分治递归法 int mid; / 数组的分界点 if ( (left + 1) = right) / 分治的

3、数组只有两个值时,更新max和min的值 if ( arrayleft arrayright & max arrayleft ) max = arrayleft; min arrayleft) / 判断、更新最小值 min = arrayleft; arrayright) min = arrayright; else mid = (left + right) / 2; / 对数组进行分治 MaxAndMin(array, left, mid); / 对左边的数组进行分治递归 MaxAndMin(array, mid + 1, right); / 对右边的数组进行分治递归3.2 众数问题3.2.

4、1 流程图(如图2) 图2.众数问题的流程图3.2.2 核心代码如下:void quickSort(int *array,int left,int right) / 用快速排序法排序数组 if(left right) int i = left, j = right+1; int temp = arrayleft; / 以第一个数为基准 while(true) while(array+i temp & i temp); / 从后面找小于基准的数 if(i = j) / 当leftright时停止 break; swap(arrayi, arrayj); / 交换两值 arrayleft = ar

5、rayj; arrayj = temp; int part = j; / 以靠左的较小值为界,对左右两部分数继续快排 quickSort(array, left, part-1); quickSort(array, part+1, right);4. 运行与调试4.1 查找数组最值产生随机数组并排序:(如图3、图4、图5)图3.随机数组之一及结果图4.随机数组之二及结果图5.随机数组之三及结果4.2 众数问题4.2.1 只有一个众数(如图6、图7)图6.只有一个众数的数组 图7.只有一个众数的结果4.2.2 没有众数(如图8、图9)图8.没有众数的数组 图9.没有众数的结果4.2.3 有两个众

6、数(如图10、图11)图10.有两个众数的数组 图11.有两个众数的结果5. 结果分析和小结5.1 结果分析:通过设置不同的测试数据及运行的结果,可以看出程序的算法思想是正确的,程序的运行也是有效的,全面的。5.2 实验的收获、心得体会:通过对于这两个题目的分析和设计,我正确的掌握了分治算法的思想,以及使用分治算法来解决不同的问题,对程序的设计思想有了更好、更深的练习。附录(C/C+源代码)1、查找数组最大、最小值/程序默认数组的大小值为2的幂,随机数的范围是1100#include stdlib.htime.h#define N 8 / 数组的大小static int max=0; / 存储

7、最大值static int min=101; / 存储最小值void CreateArray(int *);void ShowArray(int *);void MaxAndMin(int *, int, int);void main() int arrayN; CreateArray(array); printf(产生的随机数组为:n); ShowArray(array); MaxAndMin(array, 0, 7);该数组的最大值为:%d,最小值为:%dn,max,min);void MaxAndMin(int arrayN, int left, int right) / 求最大值最小值

8、函数,分治递归法 if ( (left + 1) = right) / 分治的数组只有两个值时,更新max和min的值void ShowArray(int *array) / 输出数组 int i; for (i = 0; N; i+) printf(%d ,arrayi);void CreateArray(int *array) / 创建随机数数组 srand( (unsigned) time( NULL ) ); / 给随机函数设置种子 arrayi = rand() % 100 + 1; /产生1100内的随机数2、众数问题iostreamfstreamusing namespace s

9、td;class Numbers /存储数组中数字出现的次数 public: Numbers() count = 0; / 初始化每个数字出现的次数 int value; int count;int ReadLen(char *);void ReadArray(char *, int *, int);void Show(int *, int);void quickSort(int *, int, int);void Mode(int *, int, Numbers *);void WriteFile(char *, int, Numbers *); int size = 0; / 记录数组的长

10、度 char *inFile = e:input.txt; / input文件的绝对路径 char *outFile = output.txt / output文件的绝对路径 size=ReadLen(inFile); int *array = new intsize; / 创建数组 ReadArray(inFile, array, size); quickSort(array, 0, size-1); /对数组用快速排序法按从小到大排序 cout 排序好的数组为: numbersmaxCount.count) maxCount = i - 1; if (maxCount = 0) cout

11、该数组中不存在众数!endl; ofstream output; output.open(filename, ios:out); output numbersmaxCount.value numbersmaxCount.count for(int j = 0; j j+) / 找出数组中出现次数同样多的其他数(可能不存在) if(numbersmaxCount.count = numbersj.count & maxCount != j) output numbersj.value numbersj.count output.close();查找成功,请查看output文件。void Mode

12、(int*array, int size, Numbers *numbers) / 找出数组中的众数和其重数 int count = 1; /初始化某个数出现的次数 for(int i = 0; size - 1; i+) /遍历排好序的数组,计算出每个数出现的次数 if(arrayi = arrayi + 1) count+; else numbersi.value = arrayi; / 将重数标记在同数的最后一个 numbersi.count = count; count = 1; numberssize-1.value = arraysize-1; numberssize-1.count = count;void quickSort(int *array,int left,int right) / 用快速排序法排序数组 / 以第一个数为基准void Show(int *array,int size) / 显示数组的结果 arrayit cout temp; / 将第一个表示长度的读取,放弃 input arrayi; input.close();int ReadLen(char *fileName) / 读取数组长度 int size; ifstream input(fileName, ios: return size;

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

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