zoukankan      html  css  js  c++  java
  • 寻找数组中第二大数


        /* 
         * 写一个函数找出一个整数数组中,第二大的数(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;
        }
    }

    合乎自然而生生不息。。。
  • 相关阅读:
    poj1015
    poj1101
    poj1081
    poj1020
    深入浅出MFC文档视图架构之实例剖析 Love3的日志 网易博客
    简单问题:LPARAM 是一个long(32bit),双字,怎么分别得到高位字和低位字的值。
    VC MFC SDI/MDI框架各部分指针获取方式
    msado15.tlh(228) : error C2011: “LockTypeEnum”: “enum”类型重定义
    C#数据库方面好书
    excel2007密码破解
  • 原文地址:https://www.cnblogs.com/samwu/p/1987432.html
Copyright © 2011-2022 走看看