我有一門功課,在那裏我有鏈表的工作有點問題,問題是排序功能,我選用了冒泡算法,這裏是一段代碼。作業,鏈表冒泡排序
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;
}
請製作[mcve]。 – Yunnosch
短例如輸入,期望輸出和實際輸出將幫助我猜 –
哦,當然,輸出應該是C,B,A,但由於某種原因,我已經得到了輸出C,A,B和IM確保if語句被執行第二倍。 輸入是A,B,C –