问题描述:给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。
算法设计:对于给定的由n个自然数组成的多重集S,计算S的众数及其重数。S有序。
#include <iostream>
using namespace std;
int largest=0; //众数的重数
int element=0; //众数
int hx_median(int *a,int &l,int &r) {
//找中位数
return a[(l+r)/2];
}
void hx_split(int *a,int med,int &l,int &r,int &l1,int &r1) {
//用中位数将数组分为两段
for(l1=0;l<=r;l1++) {
if(a[l1]==med)
break;
}//找到第一个和中位数相等的数
for(r1=l1+1;r1<=r;r1++) {
if(a[r1]!=med) {
r1--;
break;
}
}//找到最后一个和中位数相等的数
}
void hx_mode(int *a,int l,int r) {
int l1=0,r1=0;
int med=hx_median(a, l, r); //求中位数
hx_split(a,med,l,r