这个程序成功运作吗?

时间:2014-03-16 20:43:30

标签: c

我只是想知道我是否正确格式化了这个程序,以便做出被问到我的事情......

问题在于:上面显示的计数算法构成了简单有效的排序算法的基础。给定一组正整数,我们可以构造一个表,显示每个整数出现的次数,然后使用计数信息按从最小到最大的顺序打印整数列表。

使用此方法构造一个程序,该程序打开包含正整数列表的文件,对整数进行排序,并将它们写回第二个文件。您可以假设没有任何整数大于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;的文件。对文件中的整数进行排序,并将它们写回第二个文件。如果这是正确的,请告诉我,如果有,我的问题在哪里。谢谢!

1 个答案:

答案 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;
}

确保做更多的研究,当然还要在输出更多这样的问题之前使用输出来测试你的代码。