按递减顺序排序数组

时间:2016-11-30 02:09:01

标签: arrays

我必须编写一个程序来打开一个包含3列的文件,每行代表一个棒球运动员的数据。第一列表示球员号码,第二列表示击球次数,最后第三列表示平均命中数。我必须按平均命中率的降序排列玩家。我遇到了问题,它按照蝙蝠次数的降序排序。前3个数字也没有正确打印出来。

这里是前3名球员数据

3 5 .400

5 1.000

9 30 .167

这是我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float BattingA[13], At_Bat[13];
int Player_ID[13];

void Sort_Arrays(int ID[], float at_bat[], float average[]);
int main()
{
  int ID[13];
  float at_bat[13], average[13];
  FILE *readfile;
  int i;
if ((readfile = fopen("cubs-batting-ws-ab-avg.txt", "r")) == NULL)
{
    printf("The file failed to open\n");
}

for (i = 0; i < 13; i++)
{
    fscanf(readfile, "%d %f %f", ID + i, at_bat + i, average + i);
    Sort_Arrays(ID, at_bat, average);
}

printf("numbers\n");
for (i = 0; i < 13; i++)
{
    printf("%d %.0f %.3f \n", ID[i], at_bat[i], average[i]);
}
if (fclose(readfile) == EOF)//close the file.
{
    printf("The file failed to close.\n");
}

return 0;
}

void Sort_Arrays(int ID[], float BattingA[], float AtBat[])
{
int x, y = 13, z;
float New, NewID, NewAtBat;
for (x = 0; x < y; x++)
{
    for (z = x + 1; z < y; z++)
    {
        if (BattingA[x] < BattingA[z])
        {
            NewID = ID[x];
            NewAtBat = AtBat[x];
            New = BattingA[x];

            ID[x] = ID[z];
            AtBat[x] = AtBat[z];
            BattingA[x] = BattingA[z];

            ID[z] = NewID;
            AtBat[z] = NewAtBat;
            BattingA[z] = New;
        }

    }
}
}

你能做些什么来帮助我真的很感激。 谢谢大家。

1 个答案:

答案 0 :(得分:0)

参数以错误的顺序传递给Sort_Arrays函数。 at_bat作为第二个参数传入。当Sort_Arrays被编写为根据第二个参数进行排序时,您的数组将根据at_bat进行排序。