簡體   English   中英

以降序排列數組

[英]sorting an array in decreasing order

我必須編寫一個程序來打開一個包含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;
        }

    }
}
}

您可以做的任何幫助我都將非常感激。 謝謝你們。

參數以錯誤的順序傳遞給Sort_Arrays函數。 at_bat作為第二個參數傳遞。 由於Sort_Arrays是根據第二個參數進行排序的,因此您的數組將根據at_bat進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM