/*
* 写一个函数找出一个整数数组中,第二大的数(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);
}
* 写一个函数找出一个整数数组中,第二大的数(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 = { 1 , 2 , 3 , 4 , 5 , 6 };
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;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main( string [] args)
{
int [] ar = { 1 , 2 , 3 , 4 , 5 , 6 };
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;
}
}
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;
}
}