我有一个text file,其中包含我需要的所有数据,然后我将读取数据并对可用的总疫苗进行冒泡排序,使用冒泡排序我将其按降序排列,但我需要帮助如何根据新排列的Total_Vaccines更改Vaccine_Code。请帮帮忙
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct dist
{
char Name_Vaccine[5][15];
char Vaccine_Code[5][10];
char Producing_Country[5][15];
int Dosage_Required[5];
float Population_Covered[5];
float Total_Vaccines[5];
char distcode[100][100];
float distvalue[100];
};
int main()
{
struct dist sort[20];
int i, j, n=5,m;
float a,b;
FILE *f = fopen("vaccine.txt", "r");
FILE *fp = fopen("dist.txt","r");
//For Vaccine.txt
for (int i = 0; i < 5; i++)
{
fscanf(f,"%s",sort->Name_Vaccine[i]);
fscanf(f,"%s",sort->Vaccine_Code[i]);
fscanf(f,"%s",sort->Producing_Country[i]);
fscanf(f,"%d",&sort->Dosage_Required[i]);
fscanf(f,"%f",&sort->Population_Covered[i]);
fscanf(f,"%f",&sort->Total_Vaccines[i]);
}
fclose(f);
//Original Order
printf("The numbers arranged in Original order for Vaccine.txt are given below\n");
for (i = 0; i < n; ++i)
{
printf("%s %.4f\n",sort->Vaccine_Code[i], sort->Total_Vaccines[i]);
}
// sorting begins ... //
for (i = 0; i < n; ++i)
{
for (j = i + 1; j < n; ++j)
{
if (sort->Total_Vaccines[i] < sort->Total_Vaccines[j])
{
a = sort->Total_Vaccines[i];
sort->Total_Vaccines[i] = sort->Total_Vaccines[j];
sort->Total_Vaccines[j] = a;
}
}
}
printf("The numbers arranged in Descending order for Vaccine are given below\n");
for (i = 0; i < n; ++i)
{
printf("%s %9.4f\n",sort->Vaccine_Code[i], sort->Total_Vaccines[i]);
}
return 0;
}发布于 2021-06-30 15:23:40
与其移动数据,不如直接移动指向数据的指针。基本上,您使用数字0, ..., n - 1初始化一个大小为n的数组。然后使用比较函数对数组进行排序,该函数将索引后面的值进行比较。
它应该看起来像下面修改过的代码。但要注意,我没有测试它。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ARRAYSIZE 5
struct dist
{
char Name_Vaccine[5][15];
char Vaccine_Code[5][10];
char Producing_Country[5][15];
int Dosage_Required[5];
float Population_Covered[5];
float Total_Vaccines[5];
char distcode[100][100];
float distvalue[100];
};
int main()
{
struct dist sort[20];
int i, j, n=ARRAYSIZE,m;
int idxArray[ARRAYSIZE];
float a,b;
FILE *f = fopen("vaccine.txt", "r");
FILE *fp = fopen("dist.txt","r");
//For Vaccine.txt
for (int i = 0; i < ARRAYSIZE; i++) {
fscanf(f,"%s",sort->Name_Vaccine[i]);
fscanf(f,"%s",sort->Vaccine_Code[i]);
fscanf(f,"%s",sort->Producing_Country[i]);
fscanf(f,"%d",&sort->Dosage_Required[i]);
fscanf(f,"%f",&sort->Population_Covered[i]);
fscanf(f,"%f",&sort->Total_Vaccines[i]);
idxArray[i] = i; // piggyback initialization of the index array
}
fclose(f);
//Original Order
printf("The numbers arranged in Original order for Vaccine.txt are given below\n");
for (i = 0; i < n; ++i) {
printf("%s %.4f\n",sort->Vaccine_Code[i], sort->Total_Vaccines[i]);
}
// sorting begins ... //
for (i = 0; i < n; ++i) {
for (j = i + 1; j < n; ++j) {
if (sort->Total_Vaccines[idxArray[i]] < sort->Total_Vaccines[idxArray[j]]) {
a = idxArray[i];
idxArray[i] = idxArray[j];
idxArray[j] = a;
}
}
}
printf("The numbers arranged in Descending order for Vaccine are given below\n");
for (i = 0; i < n; ++i) {
printf("%s %9.4f\n",sort->Vaccine_Code[idxArray[i]], sort->Total_Vaccines[idxArray[i]]);
}
return 0;
}显然,在数组大小为5的情况下,确切的方法并没有起到那么大的作用。甚至可以为最后一次循环中打印的每一行搜索大于最后写入元素的最小元素。
https://stackoverflow.com/questions/68189859
复制相似问题