P.S.
Ako riješavaš stvaran problem, onda možeš generirati niz pokazivača na elemente, pa sortirati taj niz pokazivača (pri čemu operacija usporedbe dohvaća elemente indirektno, a ne direktno). Taj niz ti je kao neki “indeks” nad tablicom u bazi podataka.
Jedna ideja, o kojoj sada razmišljam:
Ako bi ti takav niz bio predugačak, onda možeš koristiti algoritme za sortiranje velikih količina podataka (velikih u smislu “ne stane sve u memoriju odjednom”, ali kod tebe to naprosto znači “ne želim imati tako veliki niz, kada već imam sve u vezanoj listi” - niz ti je neka vrsta “radne memorije”, a vezana lista neka vrsta “slijednog spremnika”, poput hard-diska).
Kod takvih algoritama parcijalno sortiraš - uzmeš neki “run” duljine n elemenatan (n < N, gdje je N broj svih elemenata). Tih “n” elemenata sortiraš. Na taj način razdijeliš cijelu vezanu listu u grupe od po n elemenata i svaku grupu sortiraš za sebe unutar sebe. Efektivno, sada imaš parcijalno sortiranu vezanu listu. Imaš run od n elemenata koji je sortiran, a slijedi ga slijedeći run od n elemenata koji je sortiran, itd. Ali nikakve posebne veze između runova nema, osim da slijede jedan drugoga u vezanoj listi.
Kada su sve grupe (runovi) od n elemenata sortirani, onda ih počneš stapati koristeći merge-sort algoritam. Stapaš dva po dva runa od n elemenata dobijajući runove od 2n elemenata. Onda stapaš dva po dva runa od 2n elemenata u runove od 4*n elementa. I to tako nastavljaš sve dok ne stopiš dva preostala runa od N/2 elementa u cijelu listu od N elemenata. Ova operacija stapanja ne iziskuje nikakvu dodatnu memoriju, a slijedna je u svojoj prirodi.
Ovo ti se možda čini komplicirano ako se prvi puta susrećeš s time, ali razmisli malo - prilično je jednostavno i vrlo korisno jer je to najefikasniji način sortiranja neograničeno velike količine podataka - sortiranja kada svi podaci koji se sortiraju ne stanu odjednom u radnu memoriju, pri čemu “n” (duljina runa) može biti proizvoljno mali, a što je veći to bolje.
Osim toga, mislim da će to fascinirati profesora, a pogotovo ako pokažeš da razumiješ polimorfizam u objektno orjentiranom programiranju. Napraviš da algoritam može sortirati i zapise u datoteci na disku (koji su slijedni jedan iza drugoga, upravo kao i elementi u vezanoj listi, pa se mora moći izvesti). I napraviš da algoritam radi i s vezanom listom i na disku. I imaš biblioteku koja sortira datoteku ili vezanu listu proizvoljne duljine, pri čemu će koristiti predvidljivo mnogo memorije za samo izvođenje sortiranja.