整型数组处理算法(四)求数组的最大值和最小值
2013-09-27 23:33
267 查看
求数组的最大值和最小值,返回值在maxValue和minValue。
方法一:
分治法(Divide and couquer),将数组分成左右两部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然后综合起来求总体的最大值及最小值。这是个递归过程,对于划分后的左右两部分,同样重复这个过程,直到划分区间内只剩一个元素或者两个元素。
具体实现如下:
方法二:
用循环,实现如下:
测试代码:
测试结果就不贴了吧,有兴趣的朋友可以copy code试一试。
转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12113597
方法一:
分治法(Divide and couquer),将数组分成左右两部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然后综合起来求总体的最大值及最小值。这是个递归过程,对于划分后的左右两部分,同样重复这个过程,直到划分区间内只剩一个元素或者两个元素。
具体实现如下:
// 求数组的最大值和最小值,返回值在maxValue和minValue void MaxandMin(int *a, int l, int r, int& maxValue, int& minValue) { if(l == r) // l与r之间只有一个元素 { maxValue = a[l] ; minValue = a[l] ; return ; } if(l + 1 == r) // l与r之间只有两个元素 { if(a[l] >= a[r]) { maxValue = a[l] ; minValue = a[r] ; } else { maxValue = a[r] ; minValue = a[l] ; } return ; } int m = (l + r) / 2 ; // 求中点 int lmax ; // 左半部份最大值 int lmin ; // 左半部份最小值 MaxandMin(a, l, m, lmax, lmin) ; // 递归计算左半部份 int rmax ; // 右半部份最大值 int rmin ; // 右半部份最小值 MaxandMin(a, m + 1, r, rmax, rmin) ; // 递归计算右半部份 maxValue = max(lmax, rmax) ; // 总的最大值 minValue = min(lmin, rmin) ; // 总的最小值 }
方法二:
用循环,实现如下:
void MaxandMinByLoop(int *a, int nCount, int& maxValue, int& minValue) { maxValue = a[0]; minValue = a[0]; for (int i=1; i<nCount; i++) { if (maxValue<a[i]) { maxValue = a[i]; } else if (maxValue>a[i]) { minValue = a[i]; } } }
测试代码:
int main() { int* a= new int[6]; int* b= new int[3]; a[0]=2; a[1]=5; a[2]=3; a[3]=4; a[4]=7; a[5]=0; b[0]=8; b[1]=9; b[2]=6; int MaxNum; int MinNm; //MaxandMin(b, 0, 2, MaxNum, MinNm); MaxandMin(a, 0, 5, MaxNum, MinNm); cout << "MinNm=" << MinNm << ",MaxNum=" << MaxNum <<endl; MaxandMinByLoop(b, 3, MaxNum, MinNm); //MaxandMinByLoop(a, 6, MaxNum, MinNm); cout << "MinNm=" << MinNm << ",MaxNum=" << MaxNum <<endl; delete[] a; a=NULL; delete[] b; b=NULL; cout << endl; return 0; }
测试结果就不贴了吧,有兴趣的朋友可以copy code试一试。
转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12113597
相关文章推荐
- Hadoop链式MapReduce、多维排序、倒排索引、自连接算法、二次排序、Join性能优化、处理员工信息Join实战、URL流量分析、TopN及其排序、求平均值和最大最小值、数据清洗ETL、分析气
- c++数据类型(整型/浮点型/字符串/数组/引用/结构体(内存对齐)/类(虚函数))定义、所占字节数、最大最小值
- 整型数组处理算法(十四)不用库函数,用C语言实现将一整型数转换成字符串
- 整型数组处理算法(十一)请实现一个函数:线段重叠(性能优化)。[风林火山]
- 使用一个函数找出整型数组的最大值或最小值
- 整型数组处理算法(十二)请实现一个函数:最长顺子。[风林火山]
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 连续子数组最大和问题(能够处理全是负数,返回子数组的起止索引的O(N)算法)
- 整型数组处理算法(二)文件中有一组整数,要求排序后输出到另一个文件中
- 整型数组处理算法(十三)请实现一个函数:凑14。[风林火山]
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
- 整型数组处理算法(十一)请实现一个函数:线段重叠。[风林火山]
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 算法--求数组中的最大和最小值
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- [算法导论]在一个数组中寻找最大值和最小值所需要进行比较的次数
- 整型数组处理算法(十二)请实现一个函数:最长顺子。[风林火山]
- 整型数组处理算法(十)给定数组a[n],其中有超过一半的数为一个定值,找出这个数。[2014人人网笔试题]
- 整型数组处理算法(十二)请实现一个函数:最长顺子。[风林火山]