《演算法導論》---最大值最小值
阿新 • • 發佈:2018-12-03
《演算法導論》—最大值最小值
- 在N個元素裡同時找到最大值最小值,那麼分別獨立的找出最大值最小值,各需要N-1此比較,共2(N-1)次比較。
- 事實上只需要3*floor(N/2)次比較就可以得出。具體的做法就是成對地處理元素。先將一對輸入元素相互比較,然後把較小的與當前最小值比較,較大的與當前最大值比較,因此每兩個元素比較三次。
- 當n為奇數時,將最大值和最小值都設定為第一個元素值;當n為偶數時,將前兩個元素較大的元素設定為最大值,較小的設定為最小值。
#include "iostream" #include "algorithm" using namespace std; class Findmax_min { public: Findmax_min(int* array, int len) { this->a = array; this->len = len; } void Getmax_min() { int tmax, tmin; int j; if (len / 2 == 0) { max = a[0]; min = a[1]; j = 0; } else { max = min = a[0]; j = -1; } for (int i = 2+j; i < len-1; i++) { if (a[i] > a[i + 1]) { tmax = a[i]; tmin = a[i + 1]; } else { tmax = a[i+1]; tmin = a[i]; } if (tmax > max) { max = tmax; } if(min>tmin) { min = tmin; } } cout << "Max = " << max << " " << "Min = " << min << endl; } private: int *a, len; int max, min; }; void main() { int a[] = { 3,1,-1,0,3,9 }; int len = sizeof(a) / sizeof(a[0]); Findmax_min f(a, len); f.Getmax_min(); system("pause"); }