最大值与最小值比较问题新解

本文探讨了如何以最少的比较次数找出数组中的最大值和最小值。传统方法是逐一比较所有元素,但更优的算法是记录最大值和最小值,每次成对比较元素。对于奇数个元素的数组,通常选取第一个元素为初始最小值;偶数个元素时,先比较前两个元素。通过这种策略,可以降低比较次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   一般在比较一个数组中的最大值与最小值的时候,你是否想过最少需要经过最少需经过多少次比较呢?

   反正在我学之前,我一直以为比较就是(以最小值为例):

 1.   Min=a[1];
 2.   For i=2 to a.length
 3.        If min>a[i]
 4.          min=a[i];
 5.   return min;


实际上,这种方法是很low的,真的感慨不爱动脑经的自己。

 

     其实这并不是最好的算法,最好的方法是记录最大值与最小值,每次成对的比较元素,在这种情况下,首先的设置一个初始最小值,一般选的时候需要注意一个问题,即:数组元素的个数的奇偶性。1.当数组元素个数是奇数的时候,一般选择第一个元素为初始最小值,然后将剩余的元素成对进行比较。2.当数组元素的个数是偶数的时候,一般先对数组的前两个元素进行比较,然后选择最小的做为初始最小值。然后对剩余的元素进行成对的比较。

  1.   If   a.length%2==1
  2.        min=a[1];
  3.        for i=2 to a.length
  4.            t=Min(a[i],a[i+1])  //Min是选择最小值的函数
  5.            min=Min(min,t);
  6.            i <- i+2;
  7;   else
  8.       min=Min(a[1],a[2]);
  9.       for i=3 to a.length
  10.         t = Min(a[i],a[i+1]);
  11.         min=Min(min,t);
  12.          i  <-  i+2
  13.  return min;


伪码是我自己写的,当然会有不正确的地方,由于自己没有学过,希望能够看懂。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值