使用计数排序在C++中查找中位数和众数


假设我们有一个大小为n的数组,我们需要使用计数排序技术来查找中位数和众数。当数组元素在有限范围内时,此技术非常有用。例如,如果元素为{1, 1, 1, 2, 7, 1},则众数为1,中位数为1.5。让我们看看什么是中位数和众数:

  • 中位数是在已排序的数字列表中的中间数字。
  • 众数是在列表中出现次数最多的元素。

为了得到中位数和众数,我们必须遵循以下步骤:

  • 假设输入数组的大小为n。
  • 在将计数数组的先前计数累加到下一个索引之前,先获取计数数组。
  • 其中存储的最大值的索引是给定数据的众数。
  • 如果存在多个最大元素,则可以选择其中一个。
  • 将值存储到另一个名为**mode**的单独变量中。
  • 继续进行计数排序的常规处理。
  • 在已排序的数组中,如果n是奇数,则中位数是已排序数组中最中间的元素;如果n是偶数,则取中间两个元素,然后求它们的平均值以获得中位数。
  • 将值存储到另一个名为median的单独变量中。

示例

在线演示

#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) {
   // Check for all bases one by one
   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

更新于:2019年10月21日

浏览量:306

开启你的职业生涯

完成课程获得认证

开始学习
广告