我有一个很大的数字数组,范围从1-5。我需要获得数组中每个数字的总数,并将其放入另一个数组中,其中数组的第一个位置上的总数为1,第二个位置上的总数为2,等等。
如果我有arr1[10] ={1、4、3、1、2、4、5、4、1、3},我想去arr2[5] ={3 1 2 3 1}。
但是,在我当前的代码中,我得到1,0,0,1,0
下面是我的代码:
n = 10
arr1[n] = {1,4,3,1,2,4,5,4,1,3}
arr2[5] = {0,0,0,0,0}
for (int i = 0; i < n; i++)
{
int rate = arr1[i];
if (arr2[i] == 0)
{
int count = 0;
if (rate == 1)
{
count += 1;
arr2[i] = count;
}
cout << count << endl;
}
}
简单地遍历arr1
中的数字并增加arr2
中的相应计数器。请注意,C数组从索引0开始;)
只在最后打印计数,一旦所有计数都被计数。
如果允许使用c++:
#include <vector>
#include <map>
#include <iostream>
using namespace std;
int main(void)
{
// Do count sort
// Init vector
vector<unsigned char> a = {1,5,3,4,2,2,4,5,1,1};
map<unsigned char, size_t> a_map;
// Populate map
for (size_t i = 0; i < a.size(); i++)
a_map[a[i]]++;
vector<unsigned char> b;
// Rebuild vector from map
for (map<unsigned char, size_t>::const_iterator ci = a_map.begin(); ci != a_map.end(); ci++)
{
for (size_t i = 0; i < ci->second; i++)
b.push_back(ci->first);
}
// Print sorted vector
for (size_t i = 0; i < b.size(); i++)
cout << static_cast<int>(b[i]) << endl;
return 0;
}