排序不会对数组中的第一项进行排序
Sorting does not sort first item in the array
目前我得到这个:
struct employe{
char nomE[25];
char posteE;
float nbHeureE;
float tauxE;
} employes[16];
int nbPers = 0;
void readFile(){
int i=0;
FILE * entree;
if(entree = fopen("employes.dat", "r"))
{
fscanf(entree, "%24c %c %f %f", &employes[i].nomE, &employes[i].posteE, &employes[i].nbHeureE, &employes[i].tauxE);
nbPers++;
while(!feof(entree))
{
i++;
fscanf(entree, "%24c %c %f %f", &employes[i].nomE, &employes[i].posteE, &employes[i].nbHeureE, &employes[i].tauxE);
nbPers++;
}
fclose(entree);
}
else printf("Impossible d'ouvrir le fichier!\n");
}
void trier(struct employe employes[], int nbPers){
int j,i,k;
struct employe temp;
for(i=0;i<16;i++)
{
for(j=1;j<15;j++)
{
if(strcmp(employes[i].nomE, employes[j].nomE) < 0)
{
temp = employes[i];
employes[i] =employes[j];
employes[j] = temp;
}
}
}
}
int main() {
int p=0;
readFile();
trier(employes, nbPers);
for(p=0; p<nbPers; p++)
printf("%s", employes[p].nomE);
return 0;
}
employes.dat 看起来像这样:
Tremblay Alain A 35.0 35.5
Vachon Jean P 40.0 22.75
Lapalme Justin O 40.0 15.75
Deschenes Sylvie P 35.0 25.0
Lachance Carl O 37.5 18.0
Labonte Chantal P 40.0 20.0
Doucet Michel A 40.0 33.75
Desjardins Alex P 35.0 25.0
Tardif Guy A 40.0 28.5
Clinclin Stephane O 40.0 20.75
Lafleur Marie A 37.5 32.75
Desbiens Robert P 35.0 25.0
Desautels Maryse P 35.0 26.0
St-germain guy O 37.5 15.0
Bourgeois Louis A 37.5 29.0
St-amour Flavie P 40.0 25.0
我正在尝试按名称的字母顺序对我的员工结构进行排序 (char nomE[25];)。但是,出于某种原因,它不会对名字进行排序并输出:
Tremblay Alain
Bourgeois Louis
Clinclin Stephane
Desautels Maryse
Desbiens Robert
Deschenes Sylvie
Desjardins Alex
Doucet Michel
Labonte Chantal
Lachance Carl
Lafleur Marie
Lapalme Justin
St-amour Flavie
St-germain guy
Tardif Guy
Vachon Jean
如果有人知道原因,我将不胜感激。提前谢谢你。
变化:
for(i=0;i<16;i++) {
for(j=1;j<15;j++){
至:
for(i=0;i<16;i++) {
for(j=0;j<15;j++){
编辑:
您混淆了 SelectionSort 和 BubbleSort。 SelectionSort 使用 i = 0
和 j = i + 1
,但也使用 i < 15
和 j < 16
,而 BubbleSort 从 i = 1
到 i < 16
和 j = 0
和 j < 15
。上面给定的版本有一个缺点,它做的交换比需要的多一点,但最后仍然产生正确的结果。请参阅我对它在 ideone.com 环境中的实现的评论。
因为您在第一次迭代后跳过检查第一个元素。
目前我得到这个:
struct employe{
char nomE[25];
char posteE;
float nbHeureE;
float tauxE;
} employes[16];
int nbPers = 0;
void readFile(){
int i=0;
FILE * entree;
if(entree = fopen("employes.dat", "r"))
{
fscanf(entree, "%24c %c %f %f", &employes[i].nomE, &employes[i].posteE, &employes[i].nbHeureE, &employes[i].tauxE);
nbPers++;
while(!feof(entree))
{
i++;
fscanf(entree, "%24c %c %f %f", &employes[i].nomE, &employes[i].posteE, &employes[i].nbHeureE, &employes[i].tauxE);
nbPers++;
}
fclose(entree);
}
else printf("Impossible d'ouvrir le fichier!\n");
}
void trier(struct employe employes[], int nbPers){
int j,i,k;
struct employe temp;
for(i=0;i<16;i++)
{
for(j=1;j<15;j++)
{
if(strcmp(employes[i].nomE, employes[j].nomE) < 0)
{
temp = employes[i];
employes[i] =employes[j];
employes[j] = temp;
}
}
}
}
int main() {
int p=0;
readFile();
trier(employes, nbPers);
for(p=0; p<nbPers; p++)
printf("%s", employes[p].nomE);
return 0;
}
employes.dat 看起来像这样:
Tremblay Alain A 35.0 35.5
Vachon Jean P 40.0 22.75
Lapalme Justin O 40.0 15.75
Deschenes Sylvie P 35.0 25.0
Lachance Carl O 37.5 18.0
Labonte Chantal P 40.0 20.0
Doucet Michel A 40.0 33.75
Desjardins Alex P 35.0 25.0
Tardif Guy A 40.0 28.5
Clinclin Stephane O 40.0 20.75
Lafleur Marie A 37.5 32.75
Desbiens Robert P 35.0 25.0
Desautels Maryse P 35.0 26.0
St-germain guy O 37.5 15.0
Bourgeois Louis A 37.5 29.0
St-amour Flavie P 40.0 25.0
我正在尝试按名称的字母顺序对我的员工结构进行排序 (char nomE[25];)。但是,出于某种原因,它不会对名字进行排序并输出:
Tremblay Alain
Bourgeois Louis
Clinclin Stephane
Desautels Maryse
Desbiens Robert
Deschenes Sylvie
Desjardins Alex
Doucet Michel
Labonte Chantal
Lachance Carl
Lafleur Marie
Lapalme Justin
St-amour Flavie
St-germain guy
Tardif Guy
Vachon Jean
如果有人知道原因,我将不胜感激。提前谢谢你。
变化:
for(i=0;i<16;i++) {
for(j=1;j<15;j++){
至:
for(i=0;i<16;i++) {
for(j=0;j<15;j++){
编辑:
您混淆了 SelectionSort 和 BubbleSort。 SelectionSort 使用 i = 0
和 j = i + 1
,但也使用 i < 15
和 j < 16
,而 BubbleSort 从 i = 1
到 i < 16
和 j = 0
和 j < 15
。上面给定的版本有一个缺点,它做的交换比需要的多一点,但最后仍然产生正确的结果。请参阅我对它在 ideone.com 环境中的实现的评论。
因为您在第一次迭代后跳过检查第一个元素。