最大值和最小值问题的最优算法

1、最大值和最小值问题的最优算法
给定n个实数存放于一维数组A中,试设计一个算法在最坏情况下用3n/2-2次的比较找出A中的最大值和最小值(为简化,可假设n为偶数)

#define inf 0x3f3f3f3f
void maxmin(int* a, int left, int right, int* max, int* min)
{
    int mid;
    int lmax = 0, lmin = inf, rmax = 0, rmin = inf;
    if (left == right)//边界条件
    {
        *max = a[left];
        *min = a[right];
        return;
    }
    //分开始递归
    mid = (left + right) / 2;
    maxmin(a, left, mid, &lmax, &lmin);
    maxmin(a, mid + 1, right, &rmax, &rmin);
    //合并
    if (lmax > rmax)
    {
        *max = lmax;
    }
    else
    {
        *max = rmax;
    }
    if (lmin < rmin)
    {
        *min = lmin;
    }
    else
    {
        *min = rmin;
    }
    return;
}

转载于https://www.cnblogs.com/wkfvawl/p/11460280.html



  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值