我只是想知道我是否正确格式化了这个程序,以便做出被问到我的事情......
问题在于:上面显示的计数算法构成了简单有效的排序算法的基础。给定一组正整数,我们可以构造一个表,显示每个整数出现的次数,然后使用计数信息按从最小到最大的顺序打印整数列表。
使用此方法构造一个程序,该程序打开包含正整数列表的文件,对整数进行排序,并将它们写回第二个文件。您可以假设没有任何整数大于100000。
计数算法如下:
void gatherCounts(int A[], int N, int counts[]) {
int n;
for(n = 0; n < 10; n++)
counts[n] = 0;
for(n = 0; n < N; n++)
counts[A[n] - 1]++;
}
这是一组不大于10的数字,所以我尝试解决问题的方法是:
#include <stdio.h>
void gatherCounts(int A[], int N, int counts[]) {
FILE *input;
int n;
input = fopen("numbers.txt", "r");
while(!feof(input)) {
for(n = 0; n < 100000; n++)
counts[n] = 0;
for(n = 0; n < N; n++)
counts[A[n] - 1]++;
}
fclose(input);
return 0;
}
这应该读取一个名为&#34; number&#34;的文件。对文件中的整数进行排序,并将它们写回第二个文件。如果这是正确的,请告诉我,如果有,我的问题在哪里。谢谢!
答案 0 :(得分:1)
给定的函数总计数组中每个整数的数量。每个总数的偏移量是计算的数量。输入,长度和输出是一件简单的事情:
int main(void) {
int A[] = {8, 4, 6, 8, 1, 4, 8, 5, 7, 9};
int N = 10;
int counts[10];
int n0, n1;
memset(counts, 0, 10);
gatherCounts(A, N, counts);
for (n0 = 0; n0 < N; n0++) {
for (n1 = 0; n1 < counts[n0]; n1++)
printf("%d ", n0 + 1);
}
printf("\n");
return 0;
}
确保做更多的研究,当然还要在输出更多这样的问题之前使用输出来测试你的代码。