算法导论 ch9 最大值与最小值

#include <iostream>

using namespace std;

class Comparator {
public:
    bool operator()(int a, int b) {
        count++;
        return (a < b) ? true : false;
    }
    static int count;
};

int Comparator::count = 0;

template<class T> void MaxMin(T* A, T&max, T&min, int size, Comparator &c) {
    // check size odd or even
    T _min, _max, i;
    if (size/2== 0) {
        if (c(A[0], A[1])) {
            _min = A[0];
            _max = A[1];
        } else {
            _min = A[1];
            _max = A[0];
        }
        i = 2;
    } else {
        _min = A[0];
        _max = A[0];
        i = 1;
    }

    for (; i <= size - 2; i+=2) {
        if (c(A[i], A[i+1])) {
            if (c(A[i], _min)) {
                _min = A[i];
            }
            if (c(_max, A[i+1])) {
                _max = A[i+1];
            }
        }else{
            if (c(A[i+1], _min)) {
                _min = A[i+1];
            }
            if (c(_max, A[i])) {
                _max = A[i];
            }
        }
    }
   
    min = _min;
    max = _max;
}

int main() {
    int A[] = { 2, 5, 3, 0, 2, 3, 0, 3 };
    int size = sizeof(A)/sizeof(int);
    int min = 0;
    int max = 0;
    Comparator c;
   
    MaxMin(A, max, min, size, c);
    cout << "max is " << max << ", min is " << min << endl;
   
    cout << "size is " << size << ", compare count is " << Comparator::count << endl;
}

 

 


 

 

max is 5, min is 0
size is 8, compare count is 9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值