求最大值最小值的方法 时间复杂度O(n)

#include<iostream>    
#include <iostream>
#include <bitset>
#include <ctime>
using namespace std;

template <size_t UpperBound> class Urand{      //生成随机数
  bitset<UpperBound> used;
public:
	Urand(){ srand(time(0)); }
	double operator() ();
};

template<size_t UpperBound>
inline double Urand<UpperBound>::operator()()
{
	if(used.count() == UpperBound)
		used.reset();
	size_t newval;
	while(used[newval = rand() % UpperBound])
		;
	used[newval] = true;
	return newval*0.1;
}

int main(int argc, char* argv[])
{
	Urand<10> u;
	double darr[10];
	double first = 0.0;
	double second = 0.0;
	double min = 0.0;
	double max = 0.0;
	for ( int i = 0; i < 10; ++i)
	{
		darr[i] = u();
	}
    
	int num = sizeof(darr)/sizeof(darr[0]);
	bool flag = false;

	if( num%2==0 )
    {
        flag = true;
    }
	else
	{
        flag = false;
	}
    
	if(flag)
	{  
	   int i= 0;
	   first = darr[0];
	   second = darr[1];
	   if(first<second)
	   {
          min = first;
		  max = second;
	   }
	   else
	   {
          min = second;
		  max = first;
	   }
	}
	else
	{
		min = darr[0];
		max = darr[0];
	}
	
	   for( flag? i=2 : i=1; i<num; i+=2 )
	   {
            if( darr[i]<darr[i+1] )
			{
			    if( min>darr[i] ) 
				{
                    min = darr[i];
				}
				if( max<darr[i+1] )
				{
                    max = darr[i+1];
				}
			}
			else
			{
                if( min>darr[i+1] )
				{
                    min = darr[i+1];
				}
				if( max<darr[i])
				{
					max = darr[i];
				}

			}
	   }
	
    cout<<"Max :"<<max<<endl;
	cout<<"Min :"<<min<<endl;
	return 0;
}


原文地址:https://www.cnblogs.com/james1207/p/3293793.html