Urejanje z vstavljanjem

Vaja

Kakšna je časovna zahtevnost tega postopka? Spet imamo dve gnezdeni zanki; zunanja (po k) naredi približno n iteracij, notranja (po i) pa se pri vsakem k začne z i = k in se konča najpozneje tedaj, ko i pade na 0, torej naredi največ k iteracij, to pa je manj kot n. Skupno število iteracij notranje zanke je torej največ n ⋅ n = n2. Pri vsaki iteraciji notranje zanke moramo izvesti eno primerjavo (a[i - 1] > t, s katero preverimo, če smo že dosegli elemente, manjše od tistega, ki ga vstavljamo) in eno prireditev (da premaknemo element a[i - 1] eno mesto naprej po tabeli). Časovna zahtevnost tega postopka je torej O(n2) primerjav in prirejanj elementov.


Tu lahko opazimo nekaj zanimivih razlik v primerjavi z urejanjem z izbiranjem. Tam smo imeli za vsak element le eno zamenjavo, tu pa imamo lahko precej več dela s premikanjem elementov po tabeli. Po drugi strani pa smo morali pri izbiranju vedno izvesti največje možno število primerjav, ne glede na to, kakšno tabelo smo dobili. Pri urejanju z vstavljanjem pa je število primerjav (in prireditev) zelo odvisno od tega, kako daleč nazaj po tabeli je treba vstavljati elemente. Če dobimo tabelo, ki je že skoraj urejena, bomo imeli z vstavljanjem malo dela; če dobimo že urejeno tabelo, bo notranja zanka pri vsakem k ugotovila, da vstavljanje sploh ni potrebno, zato bo časovna zahtevnost postopka takrat le O(n).

Vidimo torej, da na vprašanje o tem, ali je boljše urejanje z izbiranjem ali urejanje z vstavljanjem, ni enostavnega odgovora – to, kateri postopek je boljši, je odvisno od tega, s kakšnimi podatki bomo imeli opravka (kako neurejena je naša tabela na začetku izvajanja), in od tega, koliko časa traja primerjanje dveh elementov, koliko časa pa prirejanje.

Vaja