牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2013-10-13 投稿人: 浏览次数:1054

转自:http://blog.csdn.net/tianmohust/article/details/12418527

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

[cpp] view plaincopy
  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 ", FindSecondBiggest(v, len));  
  52.     printf("SecondLeast = %d ", FindSecondLeast(v, len));  
  53.     return 0;  
  54. }  
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。