• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: C/C++
  • 标签: 众数问题  分治法  

资源简介

这个程序使用分治法算法思想,求得一组数中的众数,众数的重数。

资源截图

代码片段和文件信息

#include “iostream.h“
#include “stdlib.h“
#include “time.h“
#define M 20

/*modalnumber用来表示众数*/
int modalnumber=0;
/*multiplicity用来表示该众数的重数*/
int multiplicity=0;

/*
函数名:Partition
作用:对数组进行分解(与快速排序的分解思想类似)
*/
int Partition(int a[]int pint r)
{
//在a[p]到a[r-1]中随机选择一个元素作为主元
// srand(time(0));
// int x=a[rand()%(r-p)+p];
int x=a[r-1];
int i=p-1;
int temp;
for(int j=p;j<=r-2;j++)
{
if(a[j]<=x)
{
i++;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[i+1];
a[i+1]=a[r-1];
a[r-1]=temp;
return i+1;
}

/*
函数名:Count
作用:统计数组中与x相等的元素的个数并返回
*/
int Count(int a[]int xint pint r)
{
int count=0;
for(int i=p;i {
if(a[i]==x)
count++;
}
return count;
}

/*
函数名:Modal
作用:通过分治法得到数组的众数和该众数的重数
*/
void Modal(int a[]int pint r)
{
if(p {
int q=Partition(apr);
//统计分解法的主元出现的个数
int temp=Count(aa[q]pq+1);
if(multiplicity {
multiplicity=temp;
modalnumber=a[q];
}
//如果该元素以左的个数大于重数,向左递归
if(q-p-multiplicity>multiplicity)
Modal(apq);
//如果该元素以右的个数大于重数,向右递归
else if(r-q-1>multiplicity)
Modal(aq+1r);
}
}

int main()
{
int num[M]t

评论

共有 条评论