使用计数排序在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
广告