Brzo sortiranje kao programiranje

Godine 1960., K.A. Hoare je razvio metodu za brzo razvrstavanje informacija, koje su postale najpoznatije. Danas je naširoko koristi u programiranju, jer ima puno pozitivnih svojstava: može se koristiti za opće slučajeve, zahtijeva mali porast dodatne memorije, kompatibilan je s različitim vrstama popisa i pogodan je za implementaciju. Ali postoje i nedostaci koje brzo sortiranje ima: kada se koristi u radu, mnoge pogreške su dopuštene i nešto je nestabilno.

Međutim, ovo je većina proučena inačica. Nakon pojavljivanja Hoara prvog izračuna, mnogi su se uključili u njezinu gustu studiju. Velika baza nastala je na teorijskim pitanjima pronalaženja vremena provedenog na poslu, što je potkrijepljeno empirijskim podacima. Bilo je pravih prijedloga za poboljšanje glavnog algoritma i povećanje brzine rada.

Brzo sortiranje je vrlo uobičajeno, možetesusrećemo svugdje. Temelji se na TList.Sort metodi, koja postoji u svim verzijama (osim za 1) Delphi, knjižničnu funkciju vremena provedenog izvršavanja, qsort u C + +.

Osnovno načelo rada može se formulirati kao"podijeli i osvoji". Postoji slom popisa u dvije skupine i sortiranje se obavlja za svaki dio po sebi. Slijedi da je potrebno više pažnje posvetiti procesu odvajanja, tijekom kojeg se događa sljedeće: osnovni element je određen i cijeli je popis već pomaknut prema njoj. Na lijevoj strani se formira skupina kandidata, čija vrijednost je manja, svi ostali preneseni su udesno. Ispada da se glavni element u popisu sortiranog nalazi na njegovu pravom mjestu. Sljedeći korak je nazvati funkciju rekurzivne sortiranja za obje strane elemenata u odnosu na bazu. Postupak završava samo kada popis sadrži samo jedan element, odnosno da će biti razvrstan. Dakle, kako bi ovladali takvoj programskoj funkciji kao brzo razvrstavanje, trebate znati rad algoritama niže razine: a) izbor osnovnog elementa; b) najučinkovitija permutacija popisa za dobivanje dvaju setova s ​​manjim i većim vrijednostima.

Upoznat ćemo se s načelima prve. Prilikom odabira osnovnog elementa, idealno bi trebalo biti odabrano srednje mjesto s popisa. Zatim, kada je razbijen, podijeljen je u dvije jednako polovice. Izračunava samo prosječnu vrijednost na popisu je vrlo težak, tako da čak i najbrže razvrstavanje zaobilazi ovaj račun od strane. No, odabir glavnog elementa s maksimalnom ili minimalnom vrijednošću također nije najbolja opcija. U slučaju takve definicije, jedan od stvorenih popisa će biti zajamčeno da je prazan, a drugi je prepuno. Stoga zaključak da kao temeljni element treba odabrati onu koja je bliža prosjeku, ali dalje od maksimalnog i minimalnog.

Nakon što odlučite o izboru, možeteidite na posao algoritma za particioniranje. To su tzv. Unutarnji ciklusi brzog sortiranja. Sve je izgrađeno na dva brza radna indeksa: prva će se kretati elementima s lijeva na desno, drugi, naprotiv, s desna na lijevo. Pokreće se operacija izvršenja desno: indeks prolazi kroz popis i uspoređuje sve vrijednosti s glavnim. Ciklus se smatra potpunjen ako postoji element manji ili jednak broju baze. To znači da se vrijednost indeksa uspoređuje i smanjuje. S lijeve strane, posao je završen kada se pronađe veća ili jednaka vrijednost. I ovdje se vrijednost usporedbe povećava.

U ovoj fazi algoritma za particioniranje,koji sadrži brzu sortu, mogu nastati dvije situacije. Prvo je da indeks s lijeve strane bude manji od desne. To ukazuje na pogrešku, tj. Stavke na koje je navedeno pogrešne su naravi na popisu. Izlaz je mijenja mjesta. Druga situacija je kada su oba stupca jednaki ili presijecani. To ukazuje na uspješnu podjelu popisa, tj. Rad se može smatrati potpunim.