【发布时间】:2017-04-26 21:50:06
【问题描述】:
我的作业有点问题,我必须使用链表,问题是排序功能,我选择了冒泡排序算法,这是一段代码。
void BubbleSort(PrikazStruct **Seznam) {
int Prohozeno = NULL;
int Value_1, Value_2;
PrikazStruct *AktualniPrikaz = *Seznam;
PrikazStruct *Temp = AktualniPrikaz->Dalsi;
Value_1 = AktualniPrikaz->Jmeno[0];
Value_2 = AktualniPrikaz->Dalsi->Jmeno[0];
do {
Prohozeno = 1;
while (AktualniPrikaz->Dalsi != NULL) {
if (Value_1 < Value_2) {
ProhodCleny(AktualniPrikaz, AktualniPrikaz->Dalsi);
Prohozeno = 0;
}
Value_1 = AktualniPrikaz->Jmeno[0];
AktualniPrikaz = AktualniPrikaz->Dalsi;
Value_2 = AktualniPrikaz->Jmeno[0];
}
} while (!Prohozeno);
return;
}
我不明白为什么,它没有正确排序列表,这是结构交换功能
void ProhodCleny(PrikazStruct *S1, PrikazStruct *S2) {
PrikazStruct *Temp = (PrikazStruct *) malloc(sizeof(PrikazStruct));
Temp->ID = S1->ID;
strcpy(Temp->Jmeno, S1->Jmeno);
strcpy(Temp->Prijmeni, S1->Prijmeni);
Temp->Castka = S1->Castka;
strcpy(Temp->Popis, S1->Popis);
Temp->Obdobi = S1->Obdobi;
strcpy(Temp->stringObdobi, S1->stringObdobi);
strcpy(Temp->JePlatba, S1->JePlatba);
S1->ID = S2->ID;
strcpy(S1->Jmeno, S2->Jmeno);
strcpy(S1->Prijmeni, S2->Prijmeni);
S1->Castka = S2->Castka;
strcpy(S1->Popis, S2->Popis);
S1->Obdobi = S2->Obdobi;
strcpy(S1->stringObdobi, S2->stringObdobi);
strcpy(S1->JePlatba, S2->JePlatba);
S2->ID = Temp->ID;
strcpy(S2->Jmeno, Temp->Jmeno);
strcpy(S2->Prijmeni, Temp->Prijmeni);
S2->Castka = Temp->Castka;
strcpy(S2->Popis, Temp->Popis);
S2->Obdobi = Temp->Obdobi;
strcpy(S2->stringObdobi, Temp->stringObdobi);
strcpy(S2->JePlatba, Temp->JePlatba);
free(Temp);
return;
}
【问题讨论】:
-
简短的示例输入、期望的输出和实际输出会有所帮助
-
哦,当然,输出应该是 C、B、A,但由于某种原因,我得到了输出 C、A、B,并且我确定 if 语句被执行了第二次。输入是A、B、C
标签: c linked-list bubble-sort