SQL sortiranje

U ovom članku, izdvojićemo i objasniti neke od interesantnijih, čudnijih, neefikasnijih ali definitivno domišljatih algoritama sortiranja.

Pancake sort

Ovaj algoritam se bazira na operaciji prevrtanja (flip) prvih i elemenata kolekcije. Zamislite palačinke različitih veličina naslagane jedna na drugu. Cilj nam je da sortiramo palačinke po veličini. Nađemo najveću, podignemo naslagane palačinke iznad najveće (uključujući i nju), prevrnemo ih i vratimo na tanjir. Sada je najveća palačinka na vrhu. Prevrnemo sve palačinke da bismo najveću doveli na dno. Ona je na ispravnoj poziciji, tražimo sledeću najveću i ponavljamo postupak, uz izostavljanje već sortiranih palačinki. 

Bogo sort

Poznati i kao permutaciono sortiranje, glupi sort, bogo sort je primer veoma nepraktičnog i neefikasnog algoritma. Osnovna ideja je da se do sortirane kolekcije dolazi generisanjem permutacija elemenata sve dok se elementi ne dovedu u ispravan redosled. Dakle, u prvom koraku se proverava da li je kolekcija sortirana, ako jeste, tu je kraj algoritma. Ako nije, elementi se ispremeštaju nasumično, posle čega se prelazi na prvi korak.

Ako bismo ovaj algoritam koristili da sortiramo špil karata, prvo bismo proverili da li su karte u špilu već sortirane. Ako jesu, postupak bi se završio. Ako nisu, bogo sort bi predložio da bacimo ceo špil u vis, pokupimo sve karte (ili da karte nasumično izmešamo) i ponavljamo postupak dok se špil ne sortira.

Što se tiče performansi, ovaj algoritam ne mora nikad da se završi tako da ne možemo da ga ograničimo nekom od funkcija u kontekstu veliko O notacije.

Gnome sort

Gnome sort (glupi sort) je baziran na postupku kojim bi baštenski patuljak sortirao svoje saksije sa cvećem. Sortiranje kreće od druge saksije u nizu. Poredi vrednost (veličinu?) te saksije i saksije pre nje. Ako su saksije u dobrom redosledu, patuljak se pomera ispred sledeće saksije u nizu. Ako nisu, zamenjuje ih i vraća se jedan korak unazad, pozicionira se ispred prethodne saksije. Ukoliko patuljak nema više saksija ispred sebe odnosno stigne do kraja niza saksija, algoritam je gotov. Algoritam podseća na kombinaciju insertion i bubble sort-a, ima vremensku složenost O(n^2).

Sleep sort

Zovu ga i najlenjim algoritmom sortiranja. Osnovna ideja je da se za svaki element kolekcije formira programska nit (thread) koja će mirovati (sleep) proporcionalno vrednosti elementa. Nit koja provede najmanje vremena u mirovanju će prva ispisati vrednost koja joj je dodeljena, dok će nit sa najvećom vrednošću najduže mirovati pa će poslednja i ispisati dodeljenu vrednost. Dakle, elementi kolekcije će biti ispisani (uglavnom) u ispravnom redosledu.

Mane ovog pristupa su mnoge. Izvršavanje ovog algoritma zavisi od vrednosti elemenata – na primer, ne uspeva da se izbori sa negativnim brojevima (osim ako se ne obavi nekakva preliminarna obrada elemenata kolekcije). Takođe, jako veliki brojevi prave problem jer se rezultati mogu jako dugo čekati. Pored toga, ne postoji garancija da će elementi zaista biti ispisani u ispravnom redosledu.