3.2.3 🧠 Is de lijst gesorteerd?

def is_gesorteerd(lijst):
    for i in range(len(lijst) - 1):
        if lijst[i] > lijst[i + 1]:
            return False
    return True

3.2.4 🧠 Van plaats wisselen

def wissel(lijst, index1, index2):
    tijdelijk = lijst[index1]
    lijst[index1] = lijst[index2]
    lijst[index2] = tijdelijk

3.2.7 🧠 Random sort is heel traag

import random

def is_gesorteerd(rij):
    # Ga elk element vergelijken met het volgende
    for i in range(len(rij) - 1):
        if rij[i] > rij[i + 1]:
            return False
    return True

def wissel(rij, index1, index2):
    # Wissel de twee elementen van plaats
    tijdelijk = rij[index1]
    rij[index1] = rij[index2]
    rij[index2] = tijdelijk


def willekeurige_indexen(rij):
    # Kies twee willekeurige indexen
    i1 = random.randint(0, len(rij) - 1)
    i2 = random.randint(0, len(rij) - 1)
    return (i1, i2)

def random_sort(rij):
    while not is_gesorteerd(rij):
        (i1, i2) = willekeurige_indexen(rij)
        wissel(rij, i1, i2)

3.2.9 💡 Kleinste klasnummer

def kleinste_klasnummer_positie(rij):
    kleinste_index = 0
    for i in range(1, len(rij)):
        if rij[i] < rij[kleinste_index]:
            kleinste_index = i
    return kleinste_index

3.2.10 💡 Kleinste deel

def kleinste_klasnummer_positie(rij, start_staan):
    kleinste_index = start_staan
    for i in range(start_staan + 1, len(rij)):
        if rij[i] < rij[kleinste_index]:
            kleinste_index = i
    return kleinste_index

3.2.11 💡 Selection sort oefening

def wissel(rij, index1, index2):
    # Wissel de elementen op index1 en index2
    tijdelijk = rij[index1]
    rij[index1] = rij[index2]
    rij[index2] = tijdelijk


def kleinste_element_index(rij, start_index):
    # We vertrekken van start_index als voorlopig kleinste
    kleinste_index = start_index

    # Doorloop de rest van de lijst
    for i in range(start_index + 1, len(rij)):
        if rij[i] < rij[kleinste_index]:
            kleinste_index = i

    return kleinste_index

def selection_sort(rij):
    for i in range(len(rij)):
        kleinste = kleinste_element_index(rij, i)
        wissel(rij, i, kleinste)

3.2.13 💡 Verplaats het volgende element

def wissel(lijst, index1, index2):
    tijdelijk = lijst[index1]
    lijst[index1] = lijst[index2]
    lijst[index2] = tijdelijk

def wissel_tot_juiste_plaats(rij, positie_zittend):
    i = positie_zittend
    while i > 0 and rij[i] < rij[i - 1]:
        wissel(rij, i, i - 1)
        i -= 1

3.2.14 💡 Insertion sort oefening

def wissel(lijst, index1, index2):
    tijdelijk = lijst[index1]
    lijst[index1] = lijst[index2]
    lijst[index2] = tijdelijk

def wissel_tot_juiste_plaats(rij, positie_zittend):
    i = positie_zittend
    while i > 0 and rij[i] < rij[i - 1]:
        wissel(rij, i, i - 1)
        i -= 1

def insertion_sort(rij):
    for i in range(1, len(rij)):
        wissel_tot_juiste_plaats(rij, i)

3.2.16 🧠 Behoud originele lijst

def kleinste_element_groter_dan(lijst, ondergrens):
    kleinste_index = None
    for i in range(len(lijst)):
        if ondergrens is None or lijst[i] > ondergrens:
            if kleinste_index is None or lijst[i] < lijst[kleinste_index]:
                kleinste_index = i
    return kleinste_index

3.2.18 🧠 Selection sort zonder aanpassing

def kleinste_element_groter_dan(lijst, ondergrens):
    kleinste_index = None
    for i in range(len(lijst)):
        if ondergrens is None or lijst[i] > ondergrens:
            if kleinste_index is None or lijst[i] < lijst[kleinste_index]:
                kleinste_index = i
    return kleinste_index

def selection_sort(lijst):
    gesorteerd = []
    ondergrens = None
    for _ in range(len(lijst)):
        index = kleinste_element_groter_dan(lijst, ondergrens)
        ondergrens = lijst[index]
        gesorteerd.append(ondergrens)
    return gesorteerd