Boblesortering i pseudokode

Hele eksamen, alle hjelpemidler

Boblesortering i pseudokode

Elementene i en indeksert variabel (liste/array) skal sorteres i stigende rekkefølge etter følgende algoritme: Man sammenligner hvert element fra venstre til høyre i listen med neste element, og hvis elementet er større enn neste element, bytter de plass. Deretter går man videre til neste element og sammenligner på nytt frem til hele listen er gjennomgått. Dette gjentas til hele listen gjennomgås uten at det forekommer noen ombyttinger.

Under finner du deler av pseudokoden for denne algoritmen. Her er a en liste med n elementer, og a[i] er elementet på plass i i listen.

SET i TO 0
FOR hver i LESSER THAN n - 1
    IF a[i] GREATER THAN a[i+1]
        CALL byttPlass()
    ENDIF
ENDFOR

Presisering: byttPlass() er en funksjon som bytter plass på to naboelementer i listen.

Hjelpemiddelkrav: For hånd

Hva blir innholdet i listen etter at vi har kjørt programmet representert ved pseudokoden over for listen a = [8, 5, 2, 6, 12], som har n = 5 elementer?

Hjelpemiddelkrav: For hånd

Utvid pseudokoden slik at programmet den representerer, sorterer ferdig listen a i stigende rekkefølge etter algoritmen som er vist øverst. Forklar endringene du gjør. Obs! Du må også lage pseudokode for funksjonen byttPlass().

Hjelpemiddelkrav: Krever PC

Implementer pseudokoden fra punkt b i ditt programmeringsspråk. Listen skal leses inn automatisk, og den ferdig sorterte listen skal skrives til konsollet eller vises i programmet.

Fasit

[5, 2, 6, 8, 12]

En ytre løkke (REPEAT … UNTIL) gjentar gjennomgangen til en hel runde går uten ombyttinger. Et flagg byttet settes til FALSE ved starten av hver runde og til TRUE ved hver ombytting. byttPlass(a, i) bytter a[i] og a[i+1] ved hjelp av en hjelpevariabel.

LøsningsforslagKI-generert

Pseudokoden går gjennom listen én gang og sammenligner hvert element med naboen til høyre:

iSammenligningBytte?Listen etterpå
08 > 5ja[5, 8, 2, 6, 12]
18 > 2ja[5, 2, 8, 6, 12]
28 > 6ja[5, 2, 6, 8, 12]
38 > 12nei[5, 2, 6, 8, 12]

Etter én gjennomgang er listen [5, 2, 6, 8, 12]. Det største tallet som ikke står på riktig plass, «bobler» mot høyre, men listen er ikke ferdig sortert, siden 5 og 2 står i feil rekkefølge.

Algoritmen sier at gjennomgangen skal gjentas til en hel gjennomgang skjer uten ombyttinger. Vi trenger derfor

  1. en ytre løkke som gjentar gjennomgangen
  2. en variabel byttet som husker om det har skjedd en ombytting i denne runden
  3. en funksjon byttPlass() som vet hvilke elementer den skal bytte
FUNCTION byttPlass(a, i)
    SET temp TO a[i]
    SET a[i] TO a[i+1]
    SET a[i+1] TO temp
ENDFUNCTION

REPEAT
    SET byttet TO FALSE
    SET i TO 0
    FOR hver i LESSER THAN n - 1
        IF a[i] GREATER THAN a[i+1]
            CALL byttPlass(a, i)
            SET byttet TO TRUE
        ENDIF
    ENDFOR
UNTIL byttet EQUAL TO FALSE

DISPLAY a

Forklaring av endringene:

  • Ytre løkke. Den opprinnelige for-løkken er én gjennomgang. Den er lagt inne i en REPEAT … UNTIL-løkke. Vi må alltid gjennom listen minst én gang for å vite om den er sortert, og derfor passer REPEAT … UNTIL, som sjekker betingelsen til slutt. En WHILE byttet EQUAL TO TRUE-løkke virker også hvis byttet settes til TRUE før løkken.
  • Flagget byttet. Det settes til FALSE ved starten av hver gjennomgang og til TRUE hver gang to elementer bytter plass. Er det fortsatt FALSE etter en hel gjennomgang, er listen sortert, og løkken stopper.
  • Funksjonen byttPlass(a, i). Funksjonen må vite hvilken liste og hvilken plass den skal jobbe med. Derfor får den a og i som parametere. Vi trenger en hjelpevariabel temp. Uten den ville vi overskrevet a[i] før verdien var flyttet til a[i+1].

For listen i a) blir gjennomgangene:

GjennomgangListen etterpåbyttet
1[5, 2, 6, 8, 12]TRUE
2[2, 5, 6, 8, 12]TRUE
3[2, 5, 6, 8, 12]FALSE

Etter tredje gjennomgang har det ikke skjedd noen ombytting, så programmet stopper og viser den sorterte listen.

Mulig forbedring: Etter hver gjennomgang står det største av de usorterte tallene på riktig plass bakerst. Den indre løkken kan derfor stoppe ett element tidligere for hver gjennomgang. Det er ikke nødvendig for at algoritmen skal virke.

Forstå oppgaven med en KI

Du får en ferdig tekst du limer inn i den KI-chatboten du bruker. Teksten inneholder oppgaven og en instruks om at chatboten skal hjelpe deg å tenke selv — stille spørsmål, gi ett hint av gangen og la deg gjøre regningen.

Anbefalt. Chatboten får beskjed om å bruke det til å veilede deg riktig vei — ikke til å røpe svaret. Du kan slå det av hvis du vil være helt sikker på at ingenting lekker.

Hva du bør vite
  • Ingenting sendes herfra. Teksten kopieres bare til utklippstavla på enheten din. Det du limer inn i en chatbot, går til den tjenesten — og de har sine egne regler for hva de lagrer.
  • Ikke lim inn personopplysninger — navn, skole eller noe annet om deg selv eller andre. Oppgaveteksten holder.
  • KI kan ta feil, også i informasjonsteknologi. Sjekk alltid mot løsningsforslaget her på siden.
  • Er du usikker på om du har lov til å bruke KI på skolearbeidet ditt, spør læreren din først.

Tastatursnarveier

Navigasjon

⌘K / Ctrl+K
Åpne søk
G F
Gå til Fag
G E
Gå til Eksamener
G T
Gå til Temaer
G K
Gå til Kompetansemål
G H
Hjem
?
Vis snarveier

I oppgave

←/→ · J/K
Forrige / neste oppgave
0
Marker som ikke prøvd
1
Marker som prøvd
2
Marker som trenger hjelp
3
Marker som ferdig
S
Vis / skjul løsningsforslag
A
Legg til i liste
N
Skriv notat
Esc
Tilbake / avslutt