- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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; // 以靠左
您可能关注的文档
- 某船用齿轮箱动态响应仿真分析.doc
- 某节水灌溉工程设计方案.doc
- 某花城景观设计分析建议提案.doc
- 某试验桩单桩竖向抗拔载荷试验检测方案.doc
- 某调味品吉林市场运作方案.doc
- 某跨线桥桩基础施工方案.doc
- 某轮外加电流阴极保护系统工作异常研究.doc
- 某道路绿化铺装工程施工组织设计.doc
- 某输水管线工程施工组织设计.doc
- 某酒店合伙经营协议书合伙经营协议书.doc
- 初中数字化评价者培训对教师评价能力的影响及对策研究教学研究课题报告.docx
- 基于初中生的城市公园生态环境认知与保护实践研究教学研究课题报告.docx
- 《农产品冷链物流损耗的冷链物流冷链物流企业合作策略研究》教学研究课题报告.docx
- 初中阶段数独游戏对八年级学生数学思维能力的培养研究教学研究课题报告.docx
- 生态拦截沟在农业生产中的应用对农田生态环境的影响评估教学研究课题报告.docx
- 《家政服务企业员工培训体系与企业社会责任关系研究》教学研究课题报告.docx
- 人工智能教育资源在高中英语写作教学中的应用与写作技巧培养教学研究课题报告.docx
- 产学研合作与人工智能融合:教育人才培养均衡发展的实践探索教学研究课题报告.docx
- 《生态工业园区与区域产业布局优化研究》教学研究课题报告.docx
- 初中历史课程:动物形象在古代文明中的象征意义解读教学研究课题报告.docx
文档评论(0)