我正在尝试设计一个函数算法,接收两个参数,一个是数组,一个是数组的大小。我希望它能返回数组的众数,如果有多个众数,则返回它们的平均值。我的策略是先对数组进行排序,然后计算每个数字出现的次数。当该数字出现时,将计数器加一并将该计数存储在数组m中。因此,m保存了所有计数,另一个数组q保存了我们正在比较的最后一个值。
例如:如果我的列表是{1,1,1,1,2,2,2},那么我会有m[0]=4,q[0]=1,然后m[1]=3,q[1]=2。所以众数是q[0]=1。
不幸的是,到目前为止我还没有成功。希望有人能帮忙。
例如:如果我的列表是{1,1,1,1,2,2,2},那么我会有m[0]=4,q[0]=1,然后m[1]=3,q[1]=2。所以众数是q[0]=1。
不幸的是,到目前为止我还没有成功。希望有人能帮忙。
float mode(int x[],int n)
{
//Copy array and sort it
int y[n], temp, k = 0, counter = 0, m[n], q[n];
for(int i = 0; i < n; i++)
y[i] = x[i];
for(int pass = 0; pass < n - 1; pass++)
for(int pos = 0; pos < n; pos++)
if(y[pass] > y[pos]) {
temp = y[pass];
y[pass] = y[pos];
y[pos] = temp;
}
for(int i = 0; i < n;){
for(int j = 0; j < n; j++){
while(y[i] == y[j]) {
counter++;
i++;
}
}
m[k] = counter;
q[k] = y[i];
i--; //i should be 1 less since it is referring to an array subscript
k++;
counter = 0;
}
}
return std::accumulate(x, x + n, 0.0) / n;
。顺便说一句,C++ 没有可变大小的数组。但是,你可以使用std::vector<int> y(n);
。 - Dietmar Kühlstd::map
或者std::unordered_map
来计算每个数值出现的次数。显然的替代方案是使用Boostbimap
。 - Jerry Coffin