Kuplajärjestäminen on järjestämisalgoritmi, joka koostuu vaihtelevasta määrästä kierroksia. Yhdellä kierroksella lista käydään läpi vasemmalta oikealle ja vierekkäisten lukujen paikkoja vaihdetaan keskenään, mikäli oikeanpuolimmainen on pienempi kuin vasemmanpuolimmainen. Kierroksia suoritetaan, kunnes lista on järjestyksessä.
Kuplajärjestäminen voidaan toteuttaa Pythonilla näin:
def bubble(t): while True: change = False for i in range(len(t)-1): if t[i] > t[i+1]: t[i], t[i+1] = t[i+1], t[i] change = True if not change: break
Annettuna on lista, jossa on jokin lukujen permutaatio, ja tehtäväsi on selvittää, montako kierrosta kuplajärjestämisalgoritmi tarvitsee listan järjestämiseen. Huomaa, että tässä lasketaan vain kierrokset, joiden aikana listan järjestys muuttuu.
Voit olettaa, että listalla on enintään lukua. Tavoitteena on, että algoritmin aikavaativuus on tai .
Toteuta tiedostoon bubble.py
funktio count
, joka ilmoittaa, montako kierrosta kuplajärjestäminen tarvitsee listan järjestämiseen.
def count(t): # TODO if __name__ == "__main__": print(count([1, 2, 3])) # 0 print(count([2, 3, 4, 1])) # 3 print(count([5, 1, 2, 3, 4])) # 1 print(count([6, 2, 4, 1, 5, 3])) # 3 print(count([2, 7, 4, 1, 9, 3, 8, 6, 5, 10])) # 4
Selitys: Lista on jo valmiiksi järjestyksessä, joten kierroksia ei tarvita lainkaan. Listan järjestämiseen tarvitaan kierrosta: . Listan järjestämiseen riittää yksi kierros, sillä kun vierekkäisten alkioiden paikkoja vaihdetaan siirtyy luku aina askeleen oikealle ja päätyy listan loppuun jo ensimmäisellä kierroksella.