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
}
#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