Jeśli e jest NULL, to wysypie Ci się program. Nie rozumiem po co cokolwiek alokujesz przy sortowaniu. Wymieniaj wskaźniki i już. Bardzo prymitywny sposób:
OLD: 2 -> 6 -> 1 -> 9 -> 4 -> 7 -> NULL
NEW: NULL
znajdź najmniejszy w OLD i wstaw na koniec NEW
OLD: 2 -> 6 -> 9 -> 4 -> 7 -> NULL
NEW: 1 - > NULL
znajdź najmniejszy w OLD i wstaw na koniec NEW
OLD: 6 -> 9 -> 4 -> 7 -> NULL
NEW: 1 - > 2 -> NULL
itd.
Wypinanie z OLD to
// e->next->value jest najmniejsze
tmp = e->next;
e->next = tmp->next;
Używając ->next sprawdzaj zawsze, czy bazowa struktura nie jest NULL - są to warunki brzegowe, które musisz inaczej obsłużyć.
Jeśli masz listę w której e->nastepny wskazuje na f, f->nastepny na g i okazuje się ze musisz zamienić miejscami f i g, to nie kopiuj ich zawartości między sobą, tylko każ wskazywać e->nastepny na g, a g->nastepny na f, a f->nastepny na to, na co wskazywało g->nastepny.
GL1zdA: ale powiedz mi dlaczego moj kod nie dziala? Przeciez to w sumie powinien byc taki sam efekt. Mam szybki komputer i baze 200osoba powinien obslugiwac mimo wszystko szybko (nie zalezy mi na wydajnosci ale na tym zeby to dzialalo).
A próbowałeś debugować ten kod? Inicjalizujesz wskaxniki za pomocą NULL? Bo porównania mogą się sypać - VC2005 nie inicjalizuje pamięci zerami tylko czymś w stylu 0xcdcdcdcd i później są problemy. Czemu używasz calloc?? Do pojedynczych obiektów jest malloc.
GL1zd4: wyslac Ci caly kod? ja ten program pisalem rok temu i teraz go tylko “upgraduje” bo koles powiedzial ze mozna zeby zaliczyc. Nie wiem czy tak na fragmentach sie polapiesz bo ja zeby ponownie go zrozumiec jakis czas siedzialem (za bardzo nie lubie pisac programow… denerwuje mnie to). Jest zrobione zabezpieczenie ze do funckji sortuj przesylam wskazniki juz bo jakby lista byal pusta to nie uruchomi sie wogole ta fukncja. tmp jest inicjalizowane NULL a do e i f przesylam wlasnie element pierwszy bazy.