算法导论+编程之美,查找数组中最大值和最小值
2014-03-21 10:11
471 查看
查找数组中最大值和最小值,
方法一:分治法,一分为二,分别查找子数组中最大值和最小值,合并时取两个子数组的较大者和较小者。f(n) = 2f(n-1)+2;f(n)=1.5n-2;
方法二:将数组中元素每两个一组,先比较每组中两个元素,让较大者与最大值比较,较小者与最小值比较,每组比较3次,共需比较次数为1+1.5(n-2)=1.5n-2;
从空间角度看,非递归的方法二更简单;
方法一:分治法,一分为二,分别查找子数组中最大值和最小值,合并时取两个子数组的较大者和较小者。f(n) = 2f(n-1)+2;f(n)=1.5n-2;
方法二:将数组中元素每两个一组,先比较每组中两个元素,让较大者与最大值比较,较小者与最小值比较,每组比较3次,共需比较次数为1+1.5(n-2)=1.5n-2;
从空间角度看,非递归的方法二更简单;
#include <iostream> using namespace std; void FindMaxAndMin(int num[],int l,int r,int &minNum,int &maxNum); void FindMaxAndMin2(int num[],int n,int &minNum,int &maxNum); int main() { int n = 6; int num[] = {6,5,8,3,9,7}; int minNum,maxNum; FindMaxAndMin(num,0,n-1,minNum,maxNum); for(int i=0 ; i<n ; i++){ cout << num[i] << " "; } cout << endl; cout << minNum << " " <<maxNum<< endl; FindMaxAndMin2(num,n,minNum,maxNum); cout << minNum << " " <<maxNum<< endl; return 0; } void FindMaxAndMin2(int num[],int n,int &minNum,int &maxNum) { int i = 0; if(n <= 0){ minNum = -1; maxNum = -1; return ; } if(n%2 == 1){//奇数个数 minNum = num[0]; maxNum = num[0]; i = 1; } else{//偶数个数 if(num[0] > num[1]){ maxNum = num[0]; minNum = num[1]; } else{ maxNum = num[1]; minNum = num[0]; } i = 2; } for( ; i<n ; i+=2){ if(num[i]>num[i+1]){ if(maxNum < num[i]){ maxNum = num[i]; } if(minNum > num[i+1]){ minNum = num[i+1]; } } } } void FindMaxAndMin(int num[],int l,int r,int &minNum,int &maxNum) { int minl,maxl,minr,maxr; if(r - l == 0){ minNum = num[r]; maxNum = num[r]; return ; } if(r - l == 1){ if(num[r] > num[l]){ maxNum = num[r]; minNum = num[l]; } else{ maxNum = num[l]; minNum = num[r]; } return ; } FindMaxAndMin(num,l,(l+r)/2,minl,maxl); FindMaxAndMin(num,1+(l+r)/2,r,minr,maxr); //merge if(minl < minr){ minNum = minl; } else{ minNum = minr; } if(maxl > maxr){ maxNum = maxl; } else{ maxNum = maxr; } }
相关文章推荐
- 分治法查找数组最大最小值
- 【面试题-编程】查找数组中差值最大的两个数
- 完成一个排序,求最大最小值,和查找数组元素的程序
- PHP查找数组中最大值与最小值
- C#基础编程---数组最大值最小值
- 每日一题:查找数组中最大最小值
- JavaScript 查找数组中最大值与最小值
- 每日一题:查找数组中最大最小值
- Java学习笔记30. 数组的使用(长度、遍历、最大最小值,查找)
- 同时查找数组中最大和最小值
- 查找数组最大最小值
- 数组中,查找最大值与最小值
- 80x86汇编语言编程:查找字符串中的最大、最小值
- JavaScript 查找数组中最大值与最小值
- 查找对象数组中某属性的最大最小值
- 设计一个更优算法查找一n个元素数组中的最大值和最小值
- node js 下查找数组最大最小值 时间复杂度 1.5N 思路来自编程之美
- 查找数组最大值最小值:时间复杂度最多为:o(3n/2)
- python_lintcode_698数组中最大的差值_3. 统计数字_12. 带最小值操作的栈
- c++数据类型(整型/浮点型/字符串/数组/引用/结构体(内存对齐)/类(虚函数))定义、所占字节数、最大最小值