在C ++中使用计数排序的中位数和模式

考虑到我们有一个大小为n的数组,我们必须使用计数排序技术找到中位数和众数。当阵列元素在有限范围内时,此技术很有用。假设元素为{1、1、1、2、7、1},则模式为1,中位数为1.5。让我们看看什么是中位数,什么是模式-

  • 中位数是数字排序列表中的中间数字

  • 模式是列表中出现次数最多的元素

要获得中位数和众数,我们必须遵循以下步骤:

  • 假设输入数组的大小为n

  • 在将其先前的计数求和成下一个索引之前,先获取计数数组

  • 存储在其中的最大值的索引是给定数据的模式。

  • 如果存在不止一个最大元素,那么我们可以选择其中一个

  • 将值存储到另一个名为mode的单独变量中。

  • 继续进行计数排序的常规处理。

  • 在排序数组中,如果n为奇数,则中位数是排序数组的最中间元素;如果n为偶数,则取中间两个元素,然后求出它们的平均值即可得出中位数。

  • 将值存储到另一个单独的变量中值。

示例

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   //一一检查所有基地
   for (int base=2; base<=32; base++)
   if (isRepresentedInDDigits(num, d, base))
   return true;
   return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

输出结果

Can be represented