算法导论+编程之美,查找数组中最大值和最小值
来源:互联网 发布:网络造谣是什么罪 编辑:程序博客网 时间:2024/05/17 02:46
查找数组中最大值和最小值,
方法一:分治法,一分为二,分别查找子数组中最大值和最小值,合并时取两个子数组的较大者和较小者。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; }}
0 0
- 算法导论+编程之美,查找数组中最大值和最小值
- 算法导论系列文章之同时查找最大值和最小值
- 编程之美 - 寻找数组中的最大值和最小值
- 【编程之美】读书笔记:寻找数组中的最大值和最小值
- 编程之美_009寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 《编程之美》2.10 寻找数组中的最大值和最小值
- 编程之美 寻找数组中的最大值和最小值
- 编程之美4:求数组中的最大值和最小值
- 编程之美 -- 寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组的最大值和最小值
- 编程之美--寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 【编程之美】寻找数组中的最大值和最小值
- 编程之美读书笔记-寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 编程之美4:求数组中的最大值和最小值
- xcode 5 does not have gcc
- 解决ubuntu下root用户 不能ftp登陆的问题
- Epoll模型详解
- 宽带连接错误678错误代码怎么解决?
- 一些深刻的错误
- 算法导论+编程之美,查找数组中最大值和最小值
- 基于C++类和指针实现二叉树
- SpringMVC技术详解(二)
- adb命令设置wifi上网
- mysql主从同步异常问题整理
- 软考经验分享【转】
- java 生成UUID 36位码 36位码
- linux shell(一)shell简介
- c++中的 虚函数 纯虚函数 虚基类