模特卡咯求解数组主元素

来源:互联网 发布:日本股市 软件 编辑:程序博客网 时间:2024/04/27 14:41

#include <ctime>

class CRandom_Alg
{
public:
 CRandom_Alg(void);
 ~CRandom_Alg(void);

 bool majority(int ary[], int &x, int n);
 void random_seed(unsigned long d)
 {
  if (d==0)
  seed=time(0);
  else
   seed=d;
 }
 unsigned int my_random(unsigned long low, unsigned long high)
 {
  seed=Multipler*seed+Increment;
  return((seed>>16) % (high-low) + low);
 }

private:
 static unsigned long seed;
 const unsigned long Increment;
 const unsigned long Multipler;
};

CRandom_Alg::CRandom_Alg(void):Multipler(0x015A4E35L),Increment(1)
{
}

CRandom_Alg::~CRandom_Alg(void)
{
}

unsigned long CRandom_Alg::seed=0;

/*
    用模特卡咯方法
    求解数组ary中的主元素
    主元素:元素个数占数组个数的一半
*/

bool CRandom_Alg::majority(int ary[], int &x, int n)
{
 int i,j,k;
 random_seed(0);

 i=my_random(0,n-1);
 k=0;
 
 for(j=0;j<n;j++)
 {
  if(ary[i]==ary[j])
   k++;
 }

 if(k>n/2)
 {
  x=ary[i];
  return true;
 }

 return false;
}

void main()

{

/////////////////////////////////////////////
 ////////     模特卡咯求数组主元素    ////////////

    int ary[15]={1,2,3,4,5,3,2,3,4,3,3,3,3,3,3};
 int x=0;
 int n=15;

 CRandom_Alg m_Random_alg;
 m_Random_alg.majority(ary, x, n);

 cout<<x<<endl;


 getchar();

 return 0;

原创粉丝点击