#MergeSort (Usporiadanie spajanim) def merge(pole): print(pole) n = len(pole) if n < 2: return pole s = n // 2 #stred pola print(n, s) p1 = merge(pole[:s]) #usporiadaj lavu cast (0..s-1) p2 = merge(pole[s:]) #usporiadaj pravu cast (s..n-1) #print("-",p1) #print("+",p2) #spoj dve usporiadane polia vysl = [0]*n #vytvor pole velkosti n i = 0 #aktualny prvok v lavej casti j = 0 #aktualny prvok v pravej casti for k in range(n): print(k) if i >= len(p1): #ak uz vlavo nezostal ziaden prvok vysl[k] = p2[j] #vloz z pravej casti j += 1 elif j >= len(p2): #ak uz vpravo nezostal ziaden prvok vysl[k] = p1[i] i += 1 elif p1[i] <= p2[j]: #porovnaj aktualne prvky z oboch casti vysl[k] = p1[i] i += 1 else: vysl[k] = p2[j] #vloz z pravej casti j += 1 print(vysl) return vysl print(merge([10,7,5,15,3,8,9,5,10,3,1]))
Standard input is empty
[10, 7, 5, 15, 3, 8, 9, 5, 10, 3, 1] 11 5 [10, 7, 5, 15, 3] 5 2 [10, 7] 2 1 [10] [7] 0 1 [7, 10] [5, 15, 3] 3 1 [5] [15, 3] 2 1 [15] [3] 0 1 [3, 15] 0 1 2 [3, 5, 15] 0 1 2 3 4 [3, 5, 7, 10, 15] [8, 9, 5, 10, 3, 1] 6 3 [8, 9, 5] 3 1 [8] [9, 5] 2 1 [9] [5] 0 1 [5, 9] 0 1 2 [5, 8, 9] [10, 3, 1] 3 1 [10] [3, 1] 2 1 [3] [1] 0 1 [1, 3] 0 1 2 [1, 3, 10] 0 1 2 3 4 5 [1, 3, 5, 8, 9, 10] 0 1 2 3 4 5 6 7 8 9 10 [1, 3, 3, 5, 5, 7, 8, 9, 10, 10, 15] [1, 3, 3, 5, 5, 7, 8, 9, 10, 10, 15]