查找数组中第二大或者第二小的数值

本文介绍了一种高效的方法来找到一个无序数组中的第二大或第二小的数值。通过一次遍历数组,避免了排序带来的高时间复杂度,提供了一个实用的C++实现示例。

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

转自:http://blog.youkuaiyun.com/tianmohust/article/details/12418527

从一个给定的、无序的数组中,找出第二大或者第二小的数值。

[cpp]  view plain copy
  1. #include <stdio.h>  
  2.   
  3. int FindSecondBiggest(int *v, int len)  
  4. {  
  5.     if (v == NULL || len < 2) {  
  6.         return 0xfffffff;  
  7.     }  
  8.   
  9.     int i, max = v[0], second = v[1];  
  10.     if (max < second) {  
  11.         max = v[1];  
  12.         second = v[0];  
  13.     }  
  14.     for (i = 2; i < len; ++ i) {  
  15.         if (v[i] > max) {  
  16.             second = max;  
  17.             max = v[i];           
  18.         } else if (v[i] > second) {  
  19.             second = v[i];  
  20.         }  
  21.     }  
  22.     return second;  
  23. }  
  24.   
  25. int FindSecondLeast(int *v, int len)   
  26. {  
  27.     if (v == NULL || len < 2) {  
  28.         return 0xffffffff;  
  29.     }  
  30.   
  31.     int i, min = v[0], second = v[1];  
  32.     if (min > second) {  
  33.         min = v[1];  
  34.         second = v[0];  
  35.     }  
  36.     for (i = 2; i < len; ++ i) {  
  37.         if (v[i] < min) {  
  38.             second = min;  
  39.             min = v[i];  
  40.         } else if (v[i] < second) {  
  41.             second = v[i];  
  42.         }  
  43.     }  
  44.     return second;  
  45. }  
  46.   
  47. int main()  
  48. {  
  49.     int v[] = {1,2,3};  
  50.     int len = sizeof(v) / sizeof(v[0]);  
  51.     printf("SecondBiggest = %d\n", FindSecondBiggest(v, len));  
  52.     printf("SecondLeast = %d\n", FindSecondLeast(v, len));  
  53.     return 0;  
  54. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值