Göm meny
Gäller för: HT24

Mergesort

Du kan läsa mer om Mergesort på Wikipedia och (enbart i in-place-versionen) i boken av Miller & Ranum. Ni bör också söka ytterligare källor via t.ex. Google.

En bra visualisering av hur Quicksort fungerar kan ni se på Youtube.

Klassisk version

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def merge(left_lst, right_lst):
    merged = []
    while left_lst or right_lst:
        if not left_lst:
            merged.extend(right_lst)
            return merged
        elif not right_lst:
            merged.extend(left_lst)
            return merged
        elif left_lst[0] <= right_lst[0]:
            merged.append(left_lst.pop(0))
        else:
            merged.append(right_lst.pop(0))
    return merged


def mergesort(lst):
    if len(lst) < 2:
        return lst
    else:
        mid = len(lst) // 2
        left_sorted = mergesort(lst[:mid])
        right_sorted = mergesort(lst[mid:])
        return merge(left_sorted, right_sorted)


if __name__ == "__main__":
    print("Without repeated values:")
    values = [9, 1, 10, 2, 8, 7, 3, 6, 4, 5]
    print(f"Before sorting:\n{values}")
    values = mergesort(values)
    print(f"After sorting:\n{values}")
    
    print("\nWith repeated values:")
    values = [7, 9, 10, 4, 8, 1, 10, 1, 8, 7]
    print(f"Before sorting:\n{values}")
    values = mergesort(values)
    print(f"After sorting:\n{values}")

Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2024-10-16