算法导论读后感-之同时查找最大数与最小数
来源:互联网 发布:西蒙网络面板接线图 编辑:程序博客网 时间:2024/05/22 01:40
在数组中查询最大数与最小数,通常的做法需要遍历两次数组,进行2n次比较。但在算法导论中,介绍了一个更为高效的算法,只需要比较3*n/2次。虽然两种算法均为线性复杂度,但效率仍然可提高25%。
其思想为将数组中的元素成对处理,每次处理两个元素,进行1次比较,将大的数和最大值比较,将小的数和最小值比较,因此,处理两个元素,进行了3次比较。比原来每个数要比较1次最大值1次最小值就有提升。具体算法代码如下:
void RandomSelect::selectMaxAndMin(int *a, int length, int &maxIndex, int &minIndex){ maxIndex = 0; minIndex = 0; int maxValue = a[0]; int minValue = a[0]; for (int i = 0; i < length/2; i++) { if (a[2*i] < a[2*i + 1]) { if (a[2*i] < minValue) { minValue = a[2*i]; minIndex = 2 * i; } if (a[2*i + 1] > maxValue) { maxValue = a[2*i + 1]; maxIndex = 2 * i + 1; } } else { if (a[2*i] > maxValue) { maxValue = a[2*i]; maxIndex = 2 * i; } if (a[2*i + 1] < minValue) { minValue = a[2*i + 1]; maxIndex = 2 * i + 1; } } } if (length % 2 == 1) { if (a[length - 1] > maxValue) { maxValue = a[length-1]; maxIndex = length - 1; } if (a[length - 1] < minValue) { minValue = a[length-1]; minIndex = length - 1; } }}
阅读全文
0 0
- 算法导论读后感-之同时查找最大数与最小数
- 从一个数组中同时找出最大最小数-算法导论第九章
- 同时寻找最大数和最小数的最优算法
- 同时寻找最大数和最小数的最优算法
- 算法导论第九章例题之寻找最大数和最小数优化版
- 算法之 求最小最大数
- 同时寻找最大数和最小数的最优算法 第二大数
- 同时寻找最大数和最小数的最优算法 第二大数
- 【算法拾遗】最大数和最小数
- 求最大数与最小数
- 最大数与最小数调换位置
- 最大数与最小数调换位置
- 二叉查找数的实现(算法导论)
- 同时寻找最大数和最小数的最优算法以及寻找最大的两个数所需的最少比较次数
- 同时寻找最大数和最小数的最优算法以及寻找最大的两个数所需的最少比较次数
- 从数组中查找出最大最小两数的log(n)算法
- 从数组中查找出最大最小两数的log(n)算法
- 最小数和最大数
- 在Windows10上搭建基于sublime text 3的C/C++开发环境
- SpringBoot集成elasticseach入门实战
- Gradle官方历史版本大全
- Linux 三个命令工具!
- Mybatis学习笔记(十八)【spring和mybatis整合】
- 算法导论读后感-之同时查找最大数与最小数
- vim最简约配置
- 回顾去哪儿的这些年,最让我骄傲的是收获了这9点管理心得
- 让eclipse支持C++11特性
- java内存分区 jdk1.7之前
- 编程实现简单的计算器功能
- 微信公众号推送模板消息
- C语言:可变参数编程
- 深度优先搜索和广度优先搜索