Pythonin listassa on metodi sort, joka järjestää listan alkiot pienimmästä suurimpaan.
Metodia voidaan käyttää vaikkapa näin:
lista=[5,2,3,8,1]lista.sort()print(lista)
Ohjelma tuottaa seuraavan tuloksen:
[1, 2, 3, 5, 8]
Metodi sort on kätevä, mutta kuinka voisimme järjestää listan itse?
Kuplajärjestäminen
Oletamme seuraavaksi, että järjestettävänä on lista jossa on n alkiota.
Perinteinen yksinkertainen järjestämisalgoritmi on kuplajärjestäminen,
joka muodostuu kahdesta silmukasta.
Ensimmäinen silmukka suorittaa n kierrosta ja toinen silmukka käy läpi
listan luvut vasemmalta oikealle.
Aina jos vierekkäin on kaksi alkiota, joista vasen on suurempi kuin oikea,
algoritmi vaihtaa näiden alkioiden järjestyksen.
Algoritmi voidaan toteuttaa näin:
Kuplajärjestäminen toimii, koska ensimmäisen kierroksen jälkeen
listan suurin alkio on oikealla paikallaan,
toisen kierroksen jälkeen myös toiseksi suurin alkio on oikealla paikallaan, jne.
Niinpä n kierroksen jälkeen koko lista on järjestyksessä.
Algoritmin toiminta
Paremman kuvan järjestämisalgoritmin toiminnasta saa tulostamalla alussa
ja jokaisen muutoksen jälkeen listan sisällön:
Suuret alkiot siis "kuplivat" kohti listan loppuosaa, kunnes lista on järjestyksessä.
Algoritmin tehokkuus
Järjestämisalgoritmin tehokkuutta voidaan mitata sen perusteella,
montako vertailua algoritmi suorittaa.
Voimme mitata kuplajärjestämisen tehokkuuden näin:
Tässä ideana on, että muuttuja laskuri on alussa 0 ja
kasvaa aina yhdellä, kun algoritmi vertailee kahta alkiota.
Tässä tapauksessa algoritmi suorittaa yhteensä 20 vertailua.
Algoritmin vertailujen määrä voidaan laskea myös matemaattisesti:
koska ensimmäinen silmukka suorittaa n kierrosta ja
toinen silmukka suorittaa n–1 kierrosta,
vertailujen määrä on aina n·(n–1).
Esimerkiksi kun n = 5, vertailujen määrä on 5·4 = 20.
Toinen yksinkertainen järjestämisalgoritmi on lisäysjärjestäminen,
jossa ensimmäinen silmukka käy läpi listan alkiot vasemmalta oikealle.
Jokaisen alkion kohdalla toinen silmukka siirtää alkion oikealle
paikalleen listan alkuosassa vertaamalla alkiota ja vierekkäistä alkiota
vasemmalla. Jos vasen alkio on suurempi, alkiot vaihdetaan keskenään,
ja muuten silmukka päättyy. Algoritmi voidaan toteuttaa näin:
Tee ohjelma, joka näyttää, miten lisäysjärjestäminen järjestää listan
[5, 2, 3, 8, 1].
Tulosta listan sisältö algoritmin alussa ja jokaisen muutoksen jälkeen.
Kuplajärjestämistä voidaan tehostaa niin,
että jos sisemmän silmukan aikana ei tule yhtään muutosta,
algoritmi lopetetaan, koska lista on silloin järjestyksessä.
Tee ohjelma, joka tulostaa, montako alkioiden vertailua tehostettu kuplajärjestäminen suorittaa
tehtävän 1 listassa.