Sortieren mit Bubblesort in C

Gast #2502757
Lesenswert?
• ▲
▼
Hallo, ich habe in C eine Funktion geschrieben, mit welcher ich Einträge 
einer Liste aufsteigend nach deren ID (data_.identifier_) sortieren 
soll. Die ID ist ein unsigned int.

Mein Problem ist, dass, nachdem ich das erste Mal die Einträge 
vertauscht habe, dass ich dann in die zweite if springe, was ich aber 
nicht will.
Weiß jemand, was ich hier für einen Denkfehler habe.

hier mein Code
1
List *BubbleSort(List *list)
2
{  
3
  List *present = NULL;
4
  List *next = NULL;
5
  List *temporary= NULL;
6
  
7
  for(present = list; present->next_ != NULL; present = present->next_)
8
  {
9
    for(next = present->next_; next->next_ != NULL; next = next->next_)
10
    {    
11
      if(present->data_.identifier_ > next->data_.identifier_)
12
      {
13
        temporary = present;
14
        present = next;
15
        next = temporary;
16
      }
17

18
      if(present->data_.identifier_ == next->data_.identifier_)
19
      {
20
        list = present;
21
        return list;
22
      }
23
    }
24
  }
25
  list = present;
26
  return list;
27
}
Gast #2502785
Lesenswert?
• ▲
▼
Ja genau deswegen hab ich diese Abfrage, um auf Fehler zu überprüfen, 
denn laut meiner Spezifikation des Programmes sind gleiche IDs ein 
Fehler.

Nur ich habe das Problem, dass ich nach einem Durchlauf der 1. if die 
zweite if erfülle und somit in *next und *present dasselbe steht.
Gast #2502789
Lesenswert?
• ▲
▼
Ich habe jetzt einmal die beiden Ifs vertauscht (die auf Gleichheit habe 
ich unter die 1. angeordnet). Nun bin ich draufgekommen, dass das 
Austauschen im 1. Schleifendurchlauf funktioniert, sobald ich aber in 
der for-Schleife einmal durch bin, steht in present und next dasselbe.
#2502940
Lesenswert?
• ▲
▼
Simon schrieb:

>        temporary = present;
>        present = next;
>        next = temporary;

Du kannst diese Variablen vertauschen soviel du willst, deswegen vändern 
sich aber die Verpointerungen nicht, die die Liste aufbauen.

Du musst schon die Liste selbst modifizieren, damit sie in eine 
sortierte Reihenfolge kommt.

Hinweis: ANstelle das man die Verpointerug ändert, ist es manchmal (so 
wie hier bei dir) einfacher, wenn man die Verlinkung selbst gleich 
lässt, und dafür die Daten in den Listenknoten vertauscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren