Greitas rūšiavimas kaip programavimo metodas
1960 m. K.A. Hoare sukūrė greito informacijos, kuri tapo labiausiai žinoma, rūšiavimą. Šiandien ji yra plačiai naudojama programavimo, nes ji turi daug teigiamų savybių: ji gali būti naudojama bendrais atvejais, reikalauja nedidelis papildomos atminties padidėjimas, suderinamas su skirtingų tipų sąrašais ir yra patogu įgyvendinti. Tačiau yra ir trūkumų, kuriuos greitai tvarko: kai naudojamas darbe, leidžiama daug klaidų, o tai yra šiek tiek nestabili.
Tačiau tai yra labiausiai ištirta versija. Po pirmųjų Hoaro skaičiavimų atsiradimo daugelis dalyvavo jos tankioje studijoje. Remiantis empiriniais duomenimis, buvo sukurta didelė teorinė problema, susijusi su darbo praleidimo laiko nustatymu. Buvo pateikti realūs pasiūlymai, kaip pagerinti pagrindinį algoritmą ir padidinti darbo greitį.
Greita rūšiavimas yra labai įprasta, galitesusitikti visur. Jis remiasi TList.Sort metodu, kuris visose versijose (išskyrus 1) "Delphi" yra bibliotekos funkcija, praleistas vykdant laiką, qsort C + +.
Pagrindinis darbo principas gali būti suformuluotas kaip"suskirstyti ir užkariauti". Sąrašas yra suskirstytas į dvi grupes ir kiekvienai daliai atliekama rūšiavimas. Tai reiškia, kad reikia daugiau dėmesio skirti atskyrimo procesui, kurio metu vyksta tokie veiksniai: nustatomas bazinis elementas ir visas jo sąrašas yra perkeltas. Kairėje yra suformuota kandidatų grupė, kurios vertės yra mažesnės, o kiti perkeliami į dešinę. Pasirodo, pagrindinis sudedamųjų dalių elementas yra teisėtą vietą. Kitas žingsnis yra paskatinti rekursinę rūšiavimo funkciją abiejose elemento pusėse, palyginti su pagrindu. Darbo procesas baigiasi tik tada, kai sąraše yra tik vienas elementas, ty jis bus rūšiuotas. Taigi, norint įsisavinti tokią programavimo funkciją kaip greitą rūšiavimą, reikia žinoti žemesnio lygio algoritmų veikimą: a) bazinio elemento pasirinkimas; b) labiausiai efektyvus sąrašo pakeitimas, norint gauti du rinkinius su mažesnėmis ir didesniomis vertėmis.
Mes susipažinsime su pirmųjų principų. Renkantis bazinį elementą, idealiai turėtų būti pasirinktas vidurinis iš sąrašo. Tada, suskaldžius, jis yra padalintas į dvi lygias puses. Tik apskaičiuoti vidutinę vertę sąraše yra labai sunku, todėl net greičiausia rūšiavimas apeina šį skaičiavimą šonu. Tačiau pasirinkimas pagrindinio elemento su maksimalia arba minimalia verte taip pat nėra geriausias pasirinkimas. Tokio apibrėžimo atveju bus užtikrinta, kad vienas iš sukurtų sąrašų bus tuščias, o antrasis - perpildytas. Taigi daroma išvada, kad kaip bazinį elementą reikia pasirinkti vieną, kuris yra arčiau vidurkio, bet toliau nuo maksimalaus ir minimalaus.
Kai nuspręsite pasirinkti, galėsiteeikite į padalijimo algoritmo darbą. Tai yra vadinamieji vidiniai greito rūšiavimo ciklai. Viskas pastatyta ant dviejų greitai veikiančių rodiklių: pirmasis eina iš elementų iš kairės į dešinę, o antrasis, atvirkščiai, iš dešinės į kairę. Pradedamas vykdymo veiksmas dešinėje: indeksas praeina per sąrašą ir lygina visas reikšmes su pagrindine. Ciklas laikomas užbaigtu, jei elementas yra mažesnis arba lygus baziniam. Tai reiškia, kad indekso vertė yra lyginama ir mažėja. Kairėje pusėje darbas baigiamas, kai randama didesnė ar lygi vertė. Ir čia palyginimo vertė didėja.
Šiame skaidymo algoritmo etapekuri yra greita rūšis, gali atsirasti dvi situacijos. Pirmasis yra tas, kad kairėje esantis indeksas bus mažesnis už dešinę. Tai rodo klaidą, tai yra, elementai, kuriems jis buvo nurodytas, sąraše yra netinkamas. Išeitis keičiasi. Antroji situacija yra tada, kai abi stulpeliai yra vienodi arba suskaidomi. Tai rodo sėkmingą sąrašo padalijimą, tai yra, darbas gali būti laikomas užbaigtu.