最小与最大值

来源:互联网 发布:c语言打印糖果图形 编辑:程序博客网 时间:2024/06/06 05:01

输入:一个包含n个数的集合A

输出:集合A的最大值最小值

        单一求解最大值与最小值可以通过打擂台的方法来实现,求解最大值或者最小值需要比较n-1次,若同时要求求出最大值与最小值比较的次数为2*n-2次.事实上我们有比这个更快的算法,比较次数为3n/2.具体做法为:记录已知的最小值与最大值,对输入·的元素成对进行处理,首先比较输入的这对元素,再将小的与当前最小值比较,将大的与当前最大值比较,于是每两个元素比较3次。

        在设置最大值与最小值初始值时候依赖于n是偶数还是奇数,必须保准初始最大最小值后剩下元素有偶数个,这样才可以成对的比较完。

#include<iostream>using namespace std;void Find_MAx_and_Min(int a[], int n, int &min, int &max);int main(){int a[10] = { 5, -9, 8, -8, 56, 45, 21, 6, 78, 3 };int min = 0, max = 0;Find_MAx_and_Min(a, 10, min, max);cout << min << " " << max << endl;return 0;}void Find_MAx_and_Min(int a[], int n, int &min, int &max){int i = 1;if (n% 2) //若n是奇数min = max = a[0];else{     //否则n为偶数if (a[0] < a[1]){min = a[0];max = a[1];}else{min = a[1];max = a[0];}i++;}/*以上初始化min和max的值*/while (i<n-1){if (a[i] < a[i + 1]){min = min < a[i] ? min : a[i];max = max>a[i + 1] ? max : a[i + 1];}else{min = min < a[i + 1] ? min : a[i + 1];max = max>a[i] ? max : a[i];}i = i + 2;}}


  

0 1
原创粉丝点击