fork(1) download
  1. #MergeSort (Usporiadanie spajanim)
  2.  
  3. def merge(pole):
  4. print(pole)
  5. n = len(pole)
  6. if n < 2:
  7. return pole
  8. s = n // 2 #stred pola
  9. print(n, s)
  10. p1 = merge(pole[:s]) #usporiadaj lavu cast (0..s-1)
  11. p2 = merge(pole[s:]) #usporiadaj pravu cast (s..n-1)
  12. #print("-",p1)
  13. #print("+",p2)
  14. #spoj dve usporiadane polia
  15.  
  16. vysl = [0]*n #vytvor pole velkosti n
  17. i = 0 #aktualny prvok v lavej casti
  18. j = 0 #aktualny prvok v pravej casti
  19. for k in range(n):
  20. print(k)
  21. if i >= len(p1): #ak uz vlavo nezostal ziaden prvok
  22. vysl[k] = p2[j] #vloz z pravej casti
  23. j += 1
  24. elif j >= len(p2): #ak uz vpravo nezostal ziaden prvok
  25. vysl[k] = p1[i]
  26. i += 1
  27. elif p1[i] <= p2[j]: #porovnaj aktualne prvky z oboch casti
  28. vysl[k] = p1[i]
  29. i += 1
  30. else:
  31. vysl[k] = p2[j] #vloz z pravej casti
  32. j += 1
  33. print(vysl)
  34. return vysl
  35.  
  36.  
  37. print(merge([10,7,5,15,3,8,9,5,10,3,1]))
  38.  
Success #stdin #stdout 0.02s 27704KB
stdin
Standard input is empty
stdout
[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]