网站大量收购独家精品文档,联系QQ:2885784924

查找数组元素的最大值和最小值众数问题.doc

查找数组元素的最大值和最小值众数问题.doc

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

《算法设计与分析》 上 机 实 验 报 告 专 业 班 级 学 号 学生姓名 完成日期 1. 上机题目及实验环境 1.1上机题目: 1.1.1 用分治法查找数组元素的最大值和最小值 1.1.2 众数问题 1.2实验环境: CPU:Intel Core i3 2.30GHz 内存:2.0G 操作系统:Windows 7 软件平台:Visual C++ 2. 算法设计与分析 2.1 查找数组最值 2.1.1 分治递归方法: 将max和min设置为静态全局变量; 将数据集array平均分为两个数据集; 分别求解两个数据集中的最大和最小值; 最终的最大和最小值通过与max和min的值比较; 采用同样的处理方法递归处理以分好的数据集。 2.1.2 细节处理: 数组的大小为,n=0,1,2,3...... 数组中的数字随机产生,数字的范围为1~100; 静态全局变量:max的初值为0,min的初值为101。 2.2 众数问题 2.2.1 快速排序算法: 设置两个变量i、j,排序开始的时候:i=left,j=right+1; 以第一个数组元素作为关键数据,赋值给temp,即temp=array[left]; 从j开始向前搜索,即由后开始向前搜索(--j),找到第一个小于temp的值array[j]; 从i开始向后搜索,即由前开始向后搜索(++i),找到第一个大于temp的array[i]; 交换array[i]和array[j]的值; 重复搜索步骤,直到i=j; 将temp的值和array[j]的值交换,并以此为界,分别在对左右两边进行快速排序。 3. 核心代码 3.1 查找最值 3.1.1 流程图(如图1) (核心函数为void MaxAndMin(int array[N], int left, int right)): 图1.查找最值的流程图 3.1.2 核心代码如下: (注:max和min是静态全局变量) void MaxAndMin(int array[N], int left, int right) // 求最大值最小值函数,分治递归法 { int mid; // 数组的分界点 if ( (left + 1) == right) // 分治的数组只有两个值时,更新max和min的值 { if ( array[left] array[right] max array[right] ) // 判断、更新最大值 max = array[right]; if ( array[left] array[right] max array[left] ) max = array[left]; if ( array[left] array[right] min array[left]) // 判断、更新最小值 min = array[left]; if ( array[left] array[right] min array[right]) min = array[right]; } else { mid = (left + right) / 2; // 对数组进行分治 MaxAndMin(array, left, mid); // 对左边的数组进行分治递归 MaxAndMin(array, mid + 1, right); // 对右边的数组进行分治递归 } } 3.2 众数问题 3.2.1 流程图(如图2) 图2.众数问题的流程图 图2.众数问题的流程图 3.2.2 核心代码如下: void quickSort(int *array,int left,int right) // 用快速排序法排序数组 { if(left right) { int i = left, j = right+1; int temp = array[left]; // 以第一个数为基准 while(true) { while(array[++i] temp i right); // 从前面找大于基准的数 while(array[--j] temp); // 从后面找小于基准的数 if(i = j) // 当leftright时停止 break; swap(array[i], array[j]); // 交换两值 } array[left] = array[j]; array[j] = temp; int part = j; // 以靠左

您可能关注的文档

文档评论(0)

xingkongwd + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档