Tema
/
Algoritmai ir duomenų struktūros GO
Pamoka 8 / 15 Efektyvus rūšiavimas ~60 min
Teorija

Stabilumas: aštuonios eilutės

Septintoje pamokoje stabilumas buvo apibrėžimas ir vienas išrinkimo rikiavimo trūkumas. Čia jis turi pasekmių.

Mažiausias įmanomas pavyzdys

Aštuoni įrašai, du atlikėjai, aštuoni skirtingi įvertinimai. Surikiuok pirma pagal įvertinimą, paskui pagal atlikėją:

$ algo stable
1. sorted by rating:      N/10 V/20 N/30 V/40 N/50 V/60 N/70 V/80
2a. then by artist (merge): N/10 N/30 N/50 N/70 V/20 V/40 V/60 V/80
2b. then by artist (quick): N/50 N/30 N/10 N/70 V/20 V/40 V/80 V/60

Abu rezultatai surikiuoti pagal atlikėją. Abu teisingi, jei klausi tik to.

Skaityk įvertinimus kiekvieno atlikėjo viduje.

Suliejimo rikiavimas: 10, 30, 50, 70 — didėjančiai. Pirmojo rikiavimo darbas išliko.

Greitasis rikiavimas: 50, 30, 10, 70 — betvarkė. Pirmojo rikiavimo darbo nebeliko.

Kodėl tai svarbu

Taip daroma daugiaraktė tvarka. Nori sąrašo „pagal atlikėją, o kiekvieno viduje pagal įvertinimą" — rikiuoji du kartus, nuo mažiau svarbaus rakto prie svarbesnio, ir stabilumas išsaugo pirmąjį.

Su nestabiliu rikiavimu tokia sudėtis neveikia. Reikia vieno palyginimo, kuris apima abu raktus iš karto — daugiau kodo, ir kiekvienam naujam derinio variantui naujo.

Spąstai

Nestabilus rikiavimas neduoda klaidos. Jis grąžina teisingai surikiuotą sąrašą — pagal tą raktą, kurio prašei. Sugriauta tvarka yra ta, kurios šįkart neminėjai, tad joks testas, tikrinantis „ar surikiuota pagal atlikėją", nieko nepastebės.