Tilbake
2.4

2.4 DRILL — Sortering: håndkjøring, kjøretid og kombinasjon

Full drill på sjanger C (håndkjøring av `Counting-Sort`/`Partition`) og E (kjøretidsfakta + kombinasjonsspørsmål: rekkefølgen på to sorteringer).

80 min
15 oppgaver
DRILLSorteringhåndkjøringkjøretidkombinasjon
Din fremgang i kapitlet
0 / 15 oppgaver

Forkunnskaper

- kap. 2.1Insertion-Sort, Merge-Sort,
Quicksort og Randomized-Quicksort, med kjøretider og
Ω(nlgn)\Omega(n\lg n)-grensen.
- kap. 2.2Counting-Sort, Radix-Sort,
Bucket-Sort og stabilitet.
- kap. 2.3Partition med siste element som pivot,
og utvelgelse.
- kap. 1.1 — de asymptotiske symbolene, og skillet
mellom Θ\Theta og OO.

Alle sju algoritmene er innført der. Dette kapitlet legger ikke til nytt stoff —
det gjør stoffet til en ferdighet.

Notasjons- og pseudokodeliste
📜Løsningsoppskriften for sorteringsoppgaver
Steg 1 — avgjør hvilken sjanger oppgaven er. Ber den deg utføre noe, er
det håndkjøring (C). Ber den om et tall eller et uttrykk, er det
kjøretidskunnskap (E). Ber den deg velge mellom algoritmer eller rekkefølger,
er det kombinasjonsspørsmålet.

Steg 2 ved håndkjøring: utfør algoritmen mekanisk, linje for linje,
uten å ta snarveier og uten å reparere en input som ser rar ut. Skriv ned
tilstanden etter hvert steg mens du regner — det er der delpoengene ligger hvis
du bommer til slutt.

Steg 3 ved håndkjøring: oppgi kun det etterspurte.

Oppgaven ber omDu leverer
telletabellen etter tellingenden ene raden C[0..k]
telletabellen etter oppsummeringenden ene raden C[0..k]
resultatet av Counting-Sortarrayet B[1..n]
Partitionarrayet etterpå og q, hvis begge er spurt om
én runde av Insertion-Sortarrayet etter den runden, ikke hele sorteringen

Steg 4 ved kjøretid: hent faktumet fra tabellen, og les spørsmålet én gang
til for å se om det gjelder beste, verste eller forventet. Skriv
Θ\Theta der grensen er tett og OO der bare øvre grense er vist. Trengs en
utregning, hold den på én linje.
Steg 5 ved kombinasjon: finn ut hvilken av de to sorteringene som er
inputfølsom, og sørg for at den kjøres på den inputen som passer den best.

Insertion-Sort er den eneste inputfølsomme i pensum: Θ(n)\Theta(n) på sortert
input, Θ(n2)\Theta(n^2) ellers.
Steg 6: skriv svaret på én til tre linjer. Lange svar gir ingen ekstra
uttelling, og de stjeler tid fra de nitten andre oppgavene.

✏️Eksempel 1: Gjennomarbeidet eksamenscase med margnotater

Dette er et sett på tre deloppgaver av den typen som kommer sammen på arket.
Les margnotatene: de sier hva som gir uttelling ved hvert steg.

a) Arrayet A = 3, 1, 4, 1, 0, 4, 2, 3, 4 skal sorteres med
Counting-Sort med k=4k = 4. Oppgi telletabellen C etter oppsummeringen.

b) Kjør Partition(A, 1, 6)A = 61, 27, 84, 13, 55, 42. Oppgi arrayet
etterpå og pivotens sluttindeks q.

c) En algoritme kjører først Merge-Sort på hele arrayet og deretter
Insertion-Sort på resultatet. Hva er total kjøretid?

a) Telletabellen etter tellingen er
1, 2, 1, 2, 3 — én nuller, to enere, én
toer, to treere og tre firere.

Etter oppsummeringen: C = 1, 3, 4, 6, 9

Margnotat. Oppgaven ba om tabellen etter oppsummeringen. Leverer du
tabellen etter tellingen, har du svart på et annet spørsmål — og hele
deloppgaven ryker, selv om regningen er riktig. Kontrollen: siste celle skal
være n=9n = 9.

Margnotat. Kjøringen videre — plasseringen bakfra — var ikke etterspurt,
og skal ikke med i svaret. (Til orientering blir B = 0, 1, 1, 2, 3, 3, 4, 4, 4.)

b) Pivoten er A[6] = 42.

jTestArray etter runden
1A[1]=61 >> 4261, 27, 84, 13, 55, 42
2A[2]=27 \le 4227, 61, 84, 13, 55, 42
3A[3]=84 >> 4227, 61, 84, 13, 55, 42
4A[4]=13 \le 4227, 13, 84, 61, 55, 42
5A[5]=55 >> 4227, 13, 84, 61, 55, 42

Etter løkka står i på 3, og siste steg bytter A[4] og A[6].
Array: 27, 13, 42, 61, 55, 84, og q = 3.
Margnotat. Her ba oppgaven om begge deler. Leverer du bare arrayet, får
du typisk delvis uttelling — hovedpoenget er der, men ett ledd mangler.
Margnotat. En vanlig feil er å sortere sidene etterpå «for at det skal se
riktig ut». Ikke gjør det: Partition lover ingenting om rekkefølgen innenfor

sidene, og et sortert svar er et galt svar på denne oppgaven.

c) Θ(nlgn)\Theta(n\lg n).

Margnotat. Begrunnelsen skal være én linje: Merge-Sort koster
Θ(nlgn)\Theta(n\lg n), og etterpå er arrayet sortert, så Insertion-Sort treffer

sitt beste tilfelle og koster Θ(n)\Theta(n). Summen domineres av det første
leddet.
Margnotat. Motsatt rekkefølge er den fellen oppgaven egentlig tester: kjører

du Insertion-Sort først, kan den alene koste Θ(n2)\Theta(n^2), og totalen blir

Θ(n2)\Theta(n^2).
På eksamen leverer du de tre linjene under — resten er utregning:
- a) C = 1, 3, 4, 6, 9
- b) 27, 13, 42, 61, 55, 84, q = 3

- c) Θ(nlgn)\Theta(n\lg n)

Drill: Counting-Sort (~15 min)

Fem oppgaver på håndkjøring. Legg merke til hvor ulikt de spør — svarformatet
skifter fra oppgave til oppgave, og det er en del av testen.

📝Oppgave 1
Eksamensnivå, sjanger C
A = 2, 0, 3, 2, 1, 3, 3 skal sorteres med Counting-Sort med k=3k = 3.

Oppgi telletabellen C[0..3] etter tellingen.

📝Oppgave 2
Eksamensnivå, sjanger C

Samme array som i oppgave 1: A = 2, 0, 3, 2, 1, 3, 3, k=3k = 3.

Oppgi C[0..3] etter den kumulative oppsummeringen, og forklar med én
setning hva tallet i C[2] betyr.

📝Oppgave 3
Eksamensnivå, sjanger C
A = 1, 4, 1, 0, 4, 2 skal sorteres med Counting-Sort med k=4k = 4.

Oppgi det ferdige outputarrayet B.

📝Oppgave 4
Eksamensnivå, sjanger C…

To pakker har samme rutenummer 5. I inputarrayet ligger pakke P før pakke
Q.

a) Hvor ligger de i forhold til hverandre etter Counting-Sort?
b) Ville svaret vært det samme hvis den siste løkka gikk fra 1 og oppover
til n?

📝Oppgave 5
Eksamensnivå, sjanger C

Seks lagernumre skal sorteres med Radix-Sort: `A = 271, 039, 415, 082, 260,
417`. Hvert nummer skrives med tre siffer, altså d=3d = 3.

Oppgi arrayet etter hver av de tre rundene.

Drill: Partition (~15 min)

Fire oppgaver. Husk at svarformatet er arrayet etterpå og q når begge er
spurt om, og at sidene ikke skal sorteres.

📝Oppgave 6
Eksamensnivå, sjanger C

Kjør Partition(A, 1, 7)A = 38, 71, 15, 62, 29, 47, 33 med siste element
som pivot.

a) Oppgi arrayet etterpå.
b) Oppgi q.

📝Oppgave 7
Eksamensnivå, sjanger C

Kjør Partition(A, 1, 6)A = 9, 14, 22, 31, 45, 50 — et array som
allerede er sortert.

a) Oppgi arrayet etterpå og q.
b) Hva forteller resultatet om Quicksorts kjøretid på sortert input?

📝Oppgave 8
Eksamensnivå, sjanger C

Kjør Partition(A, 1, 5)A = 56, 41, 68, 23, 12.

Oppgi arrayet etterpå og q.

📝Oppgave 9
Eksamensnivå, sjanger…
A = 44, 17, 63, 25, 58, 31.

a) Kjør Quicksort(A, 1, 6) og oppgi arrayet etter den første
partisjoneringen.
b) Hvilke to deler blir de rekursive kallene gjort på?
c) Oppgi det ferdig sorterte arrayet.

Drill: kjøretidsfakta (~13 min)

Tre oppgaver på ren gjenkalling. Dette er de billigste poengene i faget, og de
er gratis hvis tabellen sitter.

📝Oppgave 10
Eksamensnivå, sjanger E

Oppgi beste og verste kjøretid for hver av de sju sorteringene: Insertion-Sort,
Merge-Sort, Quicksort, Randomized-Quicksort, Heapsort, Counting-Sort
og Radix-Sort. Ta med betingelsene der de finnes.

📝Oppgave 11
Eksamensnivå, sjanger E

For hvert utsagn: er kjøretiden riktig oppgitt? Rett den om nødvendig.

a) Insertion-Sort er Ω(nlgn)\Omega(n\lg n) i beste tilfelle.
b) Build-Max-Heap er Θ(nlgn)\Theta(n\lg n).
c) Randomized-Select er Θ(n)\Theta(n) i verste tilfelle.
d) Counting-Sort er Θ(n)\Theta(n).

📝Oppgave 12
Eksamensnivå, sjanger E

Du skal sortere nn elementer og må garantere kjøretiden — en forventning
holder ikke.

a) Hvilke av de sju sorteringene kan du bruke, og hva blir garantien?
b) Hvilke må du utelukke, og hvorfor?

Kombinasjonsspørsmål (~15 min)

Den siste varianten er en fast felle: du får to sorteringer og skal si hvilken
rekkefølge som er billigst. Nøkkelen er å finne den inputfølsomme
algoritmen.

📝Oppgave 13
Eksamensnivå, sjanger E

Du kjører først den ene algoritmen på hele arrayet, deretter den andre på
resultatet.

a) For hvilken rekkefølge av Merge-Sort og Insertion-Sort blir total
kjøretid Θ(nlgn)\Theta(n\lg n)?
b) Hva blir totalen i motsatt rekkefølge?
c) Begrunn med et talleksempel.

📝Oppgave 14
Eksamensnivå, sjanger E

Du kjører først Counting-Sort på en sekundærnøkkel, deretter
Insertion-Sort på primærnøkkelen. Nøklene er heltall i [0..k][0..k] med
k=O(n)k = O(n).

a) Blir resultatet sortert riktig etter begge nøklene?
b) Hva er total kjøretid i verste tilfelle?

📝Oppgave 15
Eksamensnivå, sjanger F

En kandidat skriver: «Vi kjører Merge-Sort og deretter Counting-Sort med
k=nk = n. Totalen blir Θ(n)\Theta(n), siden Counting-Sort er lineær og den siste
sorteringen bestemmer resultatet.»

Stemmer konklusjonen? Svar ja eller nei, og begrunn.

Kjøretidene du kan bli spurt om i en deloppgave

AlgoritmeBesteVersteForventetStabilPå stedetBetingelse
Insertion-SortΘ(n)\Theta(n)Θ(n2)\Theta(n^2)Θ(n2)\Theta(n^2)jajabeste på sortert input
Merge-SortΘ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)janei
QuicksortΘ(nlgn)\Theta(n\lg n)Θ(n2)\Theta(n^2)Θ(nlgn)\Theta(n\lg n)neijaverste på sortert input
Randomized-QuicksortΘ(nlgn)\Theta(n\lg n)Θ(n2)\Theta(n^2)Θ(nlgn)\Theta(n\lg n)neijaforventet gjelder enhver input
HeapsortΘ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)neija
Counting-SortΘ(n+k)\Theta(n+k)Θ(n+k)\Theta(n+k)Θ(n+k)\Theta(n+k)janeiheltall i [0..k][0..k]; lineær når k=O(n)k = O(n)
Radix-SortΘ(d(n+k))\Theta(d(n+k))Θ(d(n+k))\Theta(d(n+k))Θ(d(n+k))\Theta(d(n+k))janeikrever stabil delsortering
Bucket-SortΘ(n)\Theta(n)Θ(n2)\Theta(n^2)Θ(n)\Theta(n)janeikrever jevn fordeling
PartitionΘ(m)\Theta(m)Θ(m)\Theta(m)Θ(m)\Theta(m)jamm = lengden på delen

Heapsort og Build-Max-Heap hører hjemme i kap. 3.1;
de står her fordi de er en del av den samme puggeflaten på eksamen.

Begrepsbank

Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp
har lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet
gjelder kjernestoffet.

Svarformat for `Counting-Sort`

oppgi kun det som er etterspurt: telletabellen etter tellingen,
telletabellen etter oppsummeringen, eller outputarrayet B.

Kontrollen på den oppsummerte tabellen: siste celle skal være nn.

Å levere begge tabellene når bare én var spurt om, gir ingen ekstra
uttelling — og koster tid.

Svarformat for `Partition`

oppgi arrayet etterpå og pivotens sluttindeks q, når begge er spurt om.

Sidene skal ikke sorteres. Alt til venstre for q er \le pivoten, alt til
høyre er >>.

Bare pivotens plassering er endelig.

Svarformat for én sorteringsrunde

ber oppgaven om arrayet etter én bestemt runde, leverer du den ene tilstanden —
ikke hele sorteringen.

For Insertion-Sort betyr «runde j» at A[1..j] er ordnet og resten er
urørt.

Å kjøre ferdig hele sorteringen er å svare på et annet spørsmål.

Kombinasjonsregelen

kjører du to sorteringer etter hverandre, skal den inputfølsomme kjøres
sist, på en input som passer den.

Merge-Sort før Insertion-Sort gir Θ(nlgn)\Theta(n\lg n); motsatt rekkefølge
risikerer Θ(n2)\Theta(n^2).

Total kjøretid er summen av leddene, ikke bare det siste.

Inputfølsom sortering

en sortering hvis kjøretid avhenger av hvordan inputen ser ut.

Insertion-Sort er den eneste asymptotisk inputfølsomme i pensum: Θ(n)\Theta(n)
på sortert input, Θ(n2)\Theta(n^2) på synkende.

Merge-Sort og Heapsort er upåvirket — de gjør like mye arbeid uansett.

Felle #9 — feil kjøretidsfakta

å oppgi et kjøretidstall som gjelder et annet tilfelle enn det spørsmålet
handler om.

De fire som går igjen: Insertion-Sort beste, Build-Max-Heap,
Randomized-Select verste, og Counting-Sort uten betingelse.

Kontrollen er å lese spørsmålet én gang til og finne ordet «beste»,
«verste» eller «forventet».

Mekanisk håndkjøring

å utføre algoritmen nøyaktig slik pseudokoden sier, også når inputen ikke ser
ut som forventet.

Du reparerer ikke, forenkler ikke og hopper ikke over steg.

Det er den mekaniske kjøringen oppgaven spør etter, ikke det svaret
algoritmen «burde» gitt.

Delvis uttelling i sjanger C

en håndkjøring som er delvis riktig, gir delvis uttelling — derfor lønner det
seg å skrive ned tilstanden etter hvert steg mens du regner.

Mangler ett ledd av et sammensatt svar (for eksempel q når både array og q
var spurt om), trekkes det typisk bare for det leddet.

Blankt ark gir null. Et delvis svar gir noe.

Sjanger C — håndkjøring

oppgavetypen der du utfører en navngitt algoritme steg for steg og oppgir
sluttilstanden.

Svarformen er kun sluttilstanden, i det formatet oppgaven ber om.

Den hyppigste håndkjøringen i sorteringsdelen er Counting-Sort og
Partition.

Sjanger E — kjøretidskunnskap

oppgavetypen der du oppgir kjøretiden til en navngitt algoritme.

Svarformen er ett uttrykk, i det strammeste som er riktig, med betingelsen der
den finnes.

Den billigste poengtypen i faget — hvis tabellen sitter.

Sjanger F — «stemmer dette?»

oppgavetypen der du får en påstand og skal ta stilling til den.

Svarformen er ja eller nei først, deretter én presis setning.

Et konkret motbevis holder når svaret er nei.

Garantert mot forventet

en garanti gjelder for enhver kjøring; en forventning er et
gjennomsnitt over algoritmens tilfeldige valg.

Merge-Sort og Heapsort gir garantier; Quicksort og
Randomized-Quicksort gir forventninger.

Spør oppgaven om en garanti, er Quicksort feil svar — uansett hvor rask
den er i praksis.

Repetisjonsoppgaver

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.

Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Norges teknisk-naturvitenskapelige universitet. Dette er ikke offisielt studiemateriell. Les mer.