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;
        }
    }

    合乎自然而生生不息。。。
  • 相关阅读:
    调用系统api修改系统时间
    格式化为货币
    select的使用(二)
    select的使用(一)
    保留n位四舍五入小数
    加密解密,CryptoStream()的使用
    从字符串总分离文件路径、命名、扩展名,Substring(),LastIndexOf()的使用;替换某一类字符串,Replace()的用法
    根据标点符号分行,StringBuilder的使用;将字符串的每个字符颠倒输出,Reverse的使用
    将汉字转化为拼音,正则表达式和得到汉字的Unicode编码
    unicode编码、字符的转换和得到汉字的区位码
  • 原文地址:https://www.cnblogs.com/samwu/p/1987432.html
Copyright © 2011-2022 走看看