Sortowanie ze strukturą dynamiczną

0

Witam
Program się kompiluje ale wysypuje się gdy używa funkcji, która układa elementy listy alfabetycznie:

struct student *dodaj_alfabet (struct student *lista){

   struct student *p;
   p=lista;       
   
   int n;            //wyznaczanie ilosci elementow na liscie
   while(lista != NULL)
   {n=n+1;
   lista=lista->nastepny;};
   
   lista=p;
  int i,j;
struct dane_studenta *tmp;


  int change;
 
  for (i=0; i<n-1; ++i) 
  {
       change=0;
       for (j=0; j<n-1-i; j++)
       { 
          if (lista->nastepny->dane.nazwisko < lista->dane.nazwisko)   //porównanie sąsiądów
          {  
                tmp=lista->dane;
                 lista->dane=lista->nastepny->dane;
                 lista->nastepny->dane=tmp;    //wypchanie bąbelka     
              change=1;
          }
       }
       if(!change) break;      // nie dokonano zmian - koniec!
  
 lista=p;
 
 
}
} 

Wiecie może w czym problem?

0

Bo strasznie utrudniłeś sobie życie.
To zadanie da się wykonać w czasie liniowym, jakim cudem ci się udało to samo w czasie kwadratowym nawet nie próbuję zgadnąć.
Algorytm:

  1. Idziesz po liście, porównujesz nowe dane z kolejną pozycją na liście, jeżeli nowa dane mniejsze niż kolejna pozycja to wstawiasz te dane przed kolejną pozycją.
  2. Jeżeli doszedłeś do końca listy i nie znalazłeś większego to wstaw na koniec.

1 użytkowników online, w tym zalogowanych: 0, gości: 1