龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

二分递归查找最大和最小元素

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
//二分递归查找最大和最小元素 //YCL //2004.10.27 #include //定义一个类,表示最大和最小元素的组合 class MaxMin{ private: int max,min; public: MaxMin(int x,int y)//构造函数,给max和min附最大和最小元素

//二分递归查找最大和最小元素

  //YCL

  //2004.10.27

  #include

  //定义一个类,表示最大和最小元素的组合

  class MaxMin{

  private:

   int max,min;

  public:

   MaxMin(int x,int y)//构造函数,给max和min附最大和最小元素的值

  

   else

  

   }

   ~MaxMin(){}//析构函数

   int GetMax()//获取其中的最大值

   {

   return max;

   }

   int GetMin()//获取其中的最小值

   {

   return min;

   }

   void Print()//输出最大值和最小值

  

  };

  //从两个MaxMin类对象中选取最大值和最小值形成新的组合

  MaxMin Comp(MaxMin t1,MaxMin t2)

  {

   int x,y;

   x=t1.GetMax()>t2.GetMax()?t1.GetMax():t2.GetMax();

   y=t1.GetMin()

   MaxMin t(x,y);

   return t;

  }

  //二分递归查找:在数组a[]的[i,j]范围内查找

  MaxMin Bin_MaxMin(int i,int j,int a[])

  {

   int mid;

   if(i==ji==j-1)//递归出口:当传入数组中只有一个或两个元素时

   {

   MaxMin fmaxfmin(a[i-1],a[j-1]);

   return fmaxfmin;

   }

   else//递归调用,二分查找

   {

   mid=(i+j)/2;

   MaxMin ftemp1=Bin_MaxMin(i,mid,a);

   MaxMin ftemp2=Bin_MaxMin(mid+1,j,a);

   return Comp(ftemp1,ftemp2);

   }

  }

void main()

  {

   int i,j,n;

   const int N=10;

   int a[N];

   do{

   cout<<"How many elements do you want to input?";

   cin>>n;

   if(n<1n>N)

   cout<<"Overflow!Again!"<

   }while(n<1n>N);//输入元素个数

   cout<<"Input the elements:"<

   for(i=0;i

   cin>>a[i];

   do{

   cout<<"Input the start point and the end point:";

   cin>>i>>j;

   if((i<1i>n)(j<1j>n)(i>j&&(i>0&&i0&&j>n)))

   {

   if(i<1i>n)

   cout<<"The start point overflows!"<

   if(j<1j>n)

   cout<<"The end point overflows!"<

   if(i>j&&(i>0&&i0&&j>n))

   cout<<"The start point and the end point maybe need to be exchanged!"<

   cout<<"Input them again!"<

   }

   }while((i<1i>n)(j<1j>n)(i>j&&(i>0&&i0&&j>n)));//输入查找范围

   Bin_MaxMin(i,j,a).Print();//输出查找结果

  }

  

  

  

精彩图集

赞助商链接