今天挺无聊的,做那个软件作业还没做好。真烦呀。也不想看电影打发时间,就看看算法书吧。这是我感兴趣的。
查找众数这个问题在现实生活中如用整数表示选举中的选票,有助于快速判定是否有人赢得了选举。
//这个算法很巧妙呀!众数是指在一个集合中出现超过一半的数。
//有一种方法是找中位数,中位数必定是众数。
//不过,这种方法更巧妙,更快。
//即拿其中两个数来比较,如果不等删除,然后在剩余的集合中查找众数。
//一开始,我还没看出来,查到把算法打上去之后,才发现其中的巧妙之处。
#include<stdio.h>
//查找众数
int majority(int a[],int n)
{
int c=a[0];
int m=0;
int count;
for(int i=1;i<n;i++)
{
if(m==-1)
{
c=a[i];
m=0;
printf("c1=%d/n",c);
}
else
{
if(c==a[i])
m++;
else m--;
printf("c2=%d/n",c);
}
}
if(m==0) return -1;
else
{
count=0;
for(int i=0;i<n;i++)
{
if(c==a[i]) count++;
}
if(count>(n>>1)) return c;
else return -1;
}
}
int main()
{
int a[]={1,2,3,5,5,5,5,5,2};
int n=9;
printf("%d/n",majority(a,n));
return 0;
}