寻找众数

众数:一般来说,一组数据中,出现次数最多的数就叫这组数据的众数。
如何寻找众数?
最一般直接的想法就是把数据排好序,在遍历统计每个元素出现的次数,出现次数最多的数据即为所找的众数。
代码如下:
//寻找众数问题
#include <iostream>

using namespace std;
#define N 10
void swap(int &p,int &q)
{
     int t;
     t=p;
     p=q;
     q=t;
}

int partition(int a[],int low,int high)
{
     int i,j,temp;
     i=low;j=high;
     temp=a[i];
     do
     {
      while((a[j]>temp) && (i<j))
       j--;
      if(i<j)
       swap(a[i++],a[j]);
      while((a[i]<=temp) && (i<j))
       i++;
      if(i<j)
       swap(a[j--],a[i]);
     }while(i!=j);
     a[i]=temp;
     return i;
}

void sort(int a[],int low,int high)//快速排序
{
    if(low < high)
    {
        int k = partition(a,low,high);
        sort(a,low,k-1);
        sort(a,k+1,high);
    }
    return;

}
int search(int a[],int n)//寻找众数
{
    sort(a,0,n-1);
    int max = a[0];
    int temp = max;
    int count = 1;
    int current_count = 1;
    for(int i = 1; i < n; i++)
    {
        if(a[i] == max)
        {
            count++;continue;
        }
        else
        {
            max = a[i];
            if(count > current_count)
            {
                temp = a[i-1];
                current_count = count;
            }
        }

    }
    return temp;
}
int main()
{
    int a[N]= {1,2,2,4,3,5,8,2,7,2};
    int result = search(a,N);
    cout << result<< endl;
    return 0;
}

这个时间代价比较大,不知道还有什么好的算法,我还在思考,以后补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值