在整数数组0-100中,任何人都可以编写一个函数来计算每个可能值的出现次数,然后覆盖原始数组吗? (不,这不是作业,它的练习测试,所以我可以学习)
答案 0 :(得分:2)
void
count_sort(int min, int max, int & A[], int items) {
这是一些让你入门的东西。我们知道A[]
的任何成员只能持有0到100之间的数字。我们需要一个地方来保存每个数字的数量(即0 ... 100)。我们自己的另一个数组,每个可能数字的计数器,是这样一组计数的自然地方:
int counts[101]; // there are 101 numbers in 0 ... 100 inclusive
int i; // we'll use this an an index into the counts[ ] array
int j; // this we can use as an index into A[]
我们不能忘记使count []数组的所有成员都为零,否则我们所有的总数都是无意义的:
for ( i = 0; i < 101; i++ ) { // so let's preset all of the counts to 0
counts[i] = 0;
}
现在您可以从上到下阅读输入数组。从数组中取一个数字时,将其用作counts []数组的索引,在该数组中保存您找到的数字的运行总数。因此,假设您从输入数组中检索数字35:
i = next_input_array_number( ); // i will be 35 after this is executed
现在你有(在i
中)下一个数字;你有一个地方可以计算它的出现次数:counts[35]
。你现在如何增加counts[35]
?
然后一个接一个地从输入数组中获取数字,直到你看到它们的所有items
为止。当你完成输入数组时 - 也就是说,在你看到并计算了所有数字之后 - 你们都已经完成了,并且count []数组将保持输入数组中每个数字的总时间。 / p>
你要做的是弄清楚如何从输入数组中获取数字;也就是说,你必须用一些代码替换“next_input_array_number();”。
请发布您将用于从输入数组中检索数字的代码。