寻找数组中第二大数


 

    /* 
     * 写一个函数找出一个整数数组中,第二大的数(microsoft) 
     * 要求效率尽可能高 
     
*/  
    #include
<stdio.h>  
    #include
<stdlib.h>  
      
    
int find(int *a,int n)  
    {  
        
int i=1;  
        
int second=*(a+i);  
        
while(i<n)  
        {  
            
if(*(a+i)>second)second=*(a+i);  
            i
++;  
        }  
        
return second;  
    }  
      
    
int findsecondmaxvalue(int *a,int n)  
    {  
        
int i=0;  
        
int first=*(a+i);  
        
int second=*(a+i);  
        
while(i<n)  
        {  
            
if(*(a+i)>first)  
            {  
                second
=first;  
                first
=*(a+i);  
            }  
            
else if(*(a+i)==first)  
            {  
                
//do nothing  
            }  
            
else if(*(a+i)<first&&*(a+i)>second)  
            {  
                second
=*(a+i);  
            }  
            
else  
            {  
                
//do nothing  
            }  
            i
++;  
        }  
        
//最大值和次大值相等(只可能出现在数组的第一个元素)  
        if(first==second)  
        {  
            second
=find(a,n);  
        }  
        
return second;  
    }  
      
    
int main()  
    {  
        
int a[]={9,5,1,7,4,6,2,3,8};  
        
int n=sizeof(a)/sizeof(a[0]);  
        
int second=findsecondmaxvalue(a,n);  
        printf(
"次大值=%d\n",second);  
    } 

 

 

C#写法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    
class Program
    {
        
static void Main(string[] args)
        {
            
int[] ar = { 123456 };
            
try
            {
                Console.WriteLine(get2rdMax(ar).ToString());
            }
            
catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
            }
            Console.ReadKey();

        }

        
private static int get2rdMax(int[] ar)
        {
            
int max = ar[1], s_max = ar[1];
            
for (int i = 0; i < ar.Length; i++)
            {
                
if (ar[i] > s_max)
                {
                    s_max 
= ar[i];
                    
if (s_max > max)
                    {
                        max 
+= s_max;
                        s_max 
= max - s_max;
                        max 
-= s_max;
                    }
                }
            }

            
if (max == s_max)
                
throw new Exception("no second max!");
            
else
                
return s_max;
        }

    }
}

 

C语言写法,改写C#的

#include <stdio.h>


int main(int argc, char *argv[])
{
    
int ar[7]={1,2,3,5,6,2,3};
    
int second=get2rdMax(ar,7);
    printf(
"%d \n",second);
}

int get2rdMax(int *ar,int n)
{
    
int max=ar[1];
    
int s_max=ar[1];
    
int i;
    
for(i=0;i<n;i++)
    {
        
if(ar[i]>s_max)
        {
            s_max
=ar[i];
            
if(s_max>max)
            {
                
int temp;
                temp
=s_max;
                s_max
=max;
                max
=temp;
            }
        }
    }
    
    
if(max==s_max)
    {
        
return 99999;
    }
    
else
    {
        
return s_max;
    }
}

 

 

posted @ 2011-03-17 20:30  草珊瑚  阅读(1516)  评论(0编辑  收藏  举报