erarbeitet von: Mea und Nehir

Steckbrief Merge Sort

Zeitkomplexität
O(nlogn)
Platzkomplexität
O(n)
stabil
ja
in-place
nein
rekursiv
ja

Mergesort betrachtet die zu sortierenden Daten als Liste und halbiert und zerlegt sie bis jedes einzelne Element eine Liste ergibt. Bei diesen einzelnen Listen wird dann jede Liste für sich sortiert. Nun beginnt der Algorithmus die Elemente zu verbinden («mergen») und dabei zu sortieren. Dieser Prozess wird wiederholt bis die Gesamtliste wieder zusammengesetzt und sortiert ist.

Zuerst wird die Gesamtliste in kleinere Listen zerlegt («divide») bis jedes einzelne Element eine Liste darstellt.

Danach werden die einzelnen Listen zusammengefügt («to merge») und sortiert. Es entstehen immer grössere sortierte Liste und dies wird wiederholt bis eine sortierte Gesamtliste als Output zurückbleibt.

def merge_sort(meineliste):
	if len(meineliste) > 1:
		mid = len(meineliste) // 2
		left = meineliste[:mid]
		right = meineliste[mid:]

		merge_sort(left)
		merge_sort(right)

		i = 0
		j = 0
		
		k = 0
		
		while i < len(left) and j < len(right):
			if left[i] <= right[j]:
			  
			  meineliste[k] = left[i]
			  i += 1
			else:
				meineliste[k] = right[j]
				j += 1
			k += 1
		
		while i < len(left):
			meineliste[k] = left[i]
			i += 1
			k += 1

		while j < len(right):
			meineliste[k]=right[j]
			j += 1
			k += 1

meineliste = [54,26,93,17,103,3,77,31,44,55,20,6,1,65,253,234]
merge_sort(meineliste)
print(meineliste)
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