7. tēma: Algoritmi. 2. stunda: Kārtošanas loģika.

Tavs šīs stundas izaicinājums: Tu jau zini, ka efektīvai meklēšanai dati ir jāsakārto. Šodien Tu pats uzbūvēsi "kārtošanas dzinēju". Mēs pētīsim klasisko "burbuļkārtošanas" (Bubble Sort) algoritmu un mācīsimies manipulēt ar saraksta elementu pozīcijām, lai izveidotu funkcionējošu rezultātu (Highscores) tabulu.

SR 2.4.19. (Gatavi algoritmi tipveida uzdevumu risināšanai - kārtošana)

Teorija: Burbuļkārtošana un Apmaiņa

Vides sagatavošana (Windows)

  1. Atver PowerShell.
  2. Ieej algoritmu mapē: cd Tema7_Algoritmi
  3. Izveido jaunu failu un atver to kodu redaktorā: ni kartosana.py; code kartosana.py

Praktiskie uzdevumi

1. Līmenis (Vienkāršs): "Vietu maiņa"

Sāksim ar pašu pamatu — iemācīsimies apmainīt saraksta elementus vietām.

  1. Failā kartosana.py izveido sarakstu: rezultati = [90, 45].
  2. Izmanto Python swap sintaksi (a, b = b, a), lai samainītu nulto indeksu ar pirmo.
  3. Izdrukā sarakstu pirms un pēc maiņas.

rezultati = [90, 45]
print(f"Pirms maiņas: {rezultati}")

# Apmainām vietām
rezultati[0], rezultati[1] = rezultati[1], rezultati[0]

print(f"Pēc maiņas: {rezultati}")
Sagaidāmais rezultāts:
Pirms maiņas: [90, 45]
Pēc maiņas: [45, 90]

2. Līmenis (Viduvējs): "Burbuļa pirmais gājiens"

Uzrakstīsim loģiku, kas iziet cauri visam sarakstam un aizstumj vislielāko skaitli līdz pašām beigām.

  1. Izveido jaunu sarakstu: dati = [42, 15, 8, 99, 23].
  2. Izmanto for ciklu un range(len(dati) - 1).
  3. Ciklā iekļauj if nosacījumu: ja elements ir lielāks par savu labo kaimiņu, samaini tos vietām.
  4. Izdrukā sarakstu cikla beigās.

dati = [42, 15, 8, 99, 23]
print(f"Sākotnējie dati: {dati}")

# Viens pilns gājiens cauri sarakstam
for i in range(len(dati) - 1):
    if dati[i] > dati[i + 1]:
        dati[i], dati[i + 1] = dati[i + 1], dati[i]

print(f"Pēc viena gājiena: {dati}")
Sagaidāmais rezultāts:
Sākotnējie dati: [42, 15, 8, 99, 23]
Pēc viena gājiena: [15, 8, 42, 23, 99]

3. Līmenis (Padziļināts): "Pilnais Bubble Sort dzinējs"

Pievienosim ārējo ciklu, lai atkārtotu kārtošanu pilnībā.

  1. Izveido funkciju bubble_sort(saraksts).
  2. Pievieno ārējo ciklu for j in range(len(saraksts)):.
  3. Iekopē 2. līmeņa iekšējo ciklu un pielāgo to funkcijai.
  4. Pievieno print komandu pēc iekšējā cikla, lai vizualizētu katru gājienu.

def bubble_sort(saraksts):
    elementu_skaits = len(saraksts)
    
    for j in range(elementu_skaits):
        for i in range(elementu_skaits - 1):
            if saraksts[i] > saraksts[i + 1]:
                saraksts[i], saraksts[i + 1] = saraksts[i + 1], saraksts[i]
                
        print(f"Gājiens {j+1}: {saraksts}")
        
    return saraksts

speletaju_punkti = [64, 34, 25, 12, 22, 11, 90]
print("--- KĀRTOŠANAS PROCESS ---")
sakartots = bubble_sort(speletaju_punkti)
Sagaidāmais rezultāts:
--- KĀRTOŠANAS PROCESS ---
Gājiens 1: [34, 25, 12, 22, 11, 64, 90]
Gājiens 2: [25, 12, 22, 11, 34, 64, 90]
...
Gājiens 7: [11, 12, 22, 25, 34, 64, 90]
⬅ Iepriekšējā stunda Nākamā stunda ➡