C编程:对整数文件进行排序,同时将其原始位置保留在文件中

时间:2014-12-30 13:44:26

标签: c arrays file sorting

好的,这里我有一个小函数可以对程序中编写的一些值进行排序

 #include <stdio.h>      /* printf */
 #include <stdlib.h>     /* qsort */
 #include <conio.h>      /* getch */

 int values[] = { 40, 10, 100, 90, 20, 25 };

 int compare (const void * a, const void * b)
 {
     return ( *(int*)a - *(int*)b );
 }

 int main ()
 {
      int n;
      qsort (values, 6, sizeof(int), compare);
      for (n=0; n<6; n++)
      printf ("%d ",values[n]);
      getch();
}

这完美地运作,没有给出错误。

现在,在我的主项目中,我必须从文件中对值进行排序。我以为我可以从文件中复制这些值并完成与此相同的操作。

然而,这似乎很容易,但我也需要他们的文件行,这意味着我需要一个数字为1-SIZE的第二个数组。鉴于我的文件应该最多512行。我可以采取哪些步骤来完成这项工作?

示例:

User ID:              Score:
1                     13
2                     9
3                     13
4                     19
5                     8
6                     11
7                     14
8                     17

应改为

User ID:             Score:                  
5                    8
2                    9
6                    11
3                    13
1                    13
7                    14
8                    17
4                    19

1 个答案:

答案 0 :(得分:4)

这就是你需要的

 #include <stdio.h>      /* printf */
 #include <stdlib.h>     /* qsort */

struct Element
{
    int userId;
    int score;
};

struct Element elements[] = { 
    {1, 13},
    {2,  9},
    {3, 13},
    {4, 19},
    {5,  8},
    {6, 11},
    {7, 14},
    {8, 17},
};

int ascendingSortCompareFunction (const void * a, const void * b)
{
    return (((struct Element *)a)->score - ((struct Element *)b)->score);
}

int descendingSortCompareFunction (const void * a, const void * b)
{
    return ((struct Element *)b)->score) - (((struct Element *)a)->score;
}

int main ()
{
    int n;
    int count;

    count = sizeof(elements) / sizeof(elements[0]);

    qsort(elements, count, sizeof(elements[0]), ascendingSortCompareFunction);
    printf ("UserID\tScore (Ascending Sort)\n");
    for (n = 0 ; n < count ; n++)
        printf ("%d\t%d\n", elements[n].userId, elements[n].score);

    qsort(elements, count, sizeof(elements[0]), descendingSortCompareFunction);
    printf ("UserID\tScore (Descending Sort)\n");
    for (n = 0 ; n < count ; n++)
        printf ("%d\t%d\n", elements[n].userId, elements[n].score);

    getchar();

    return 0;
}