-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmergesort.py
More file actions
64 lines (45 loc) · 1.53 KB
/
Copy pathmergesort.py
File metadata and controls
64 lines (45 loc) · 1.53 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import time
def merge(data, drawrectangle, delay, l, m, r):
n1 = m - l + 1
n2 = r - m
left = []
for i in range(l,m + 1):
left.append(data[i])
right = []
for i in range(m + 1, r + 1):
right.append(data[i])
p1 = 0
p2 = 0
p3 = l
while p1 < n1 and p2 < n2:
if left[p1] < right[p2]:
data[p3] = left[p1]
p1 += 1
else:
data[p3] = right[p2]
p2 += 1
p3 += 1
while p1 < n1:
data[p3] = left[p1]
p1+=1
p3+=1
while p2 < n2:
data[p3] = right[p2]
p2+=1
p3+=1
drawrectangle(data, ['blue' if x >= l and x <= r else 'lightblue' for x in range(len(data))])
time.sleep(delay)
def merge_sort(data, drawrectangle, delay, l, r):
if l >= r:
return
mid = (l + r)//2
drawrectangle(data, ['yellow' if x >= l and x <= mid else 'lightblue' for x in range(len(data))])
time.sleep(delay)
merge_sort(data, drawrectangle, delay, l, mid)
drawrectangle(data, ['yellow' if x >= mid + 1 and x <= r else 'lightblue' for x in range(len(data))])
time.sleep(delay)
merge_sort(data, drawrectangle, delay, mid+1, r)
drawrectangle(data, ['green' if x >= l and x <= r else 'lightblue' for x in range(len(data))])
time.sleep(delay)
merge(data, drawrectangle, delay, l, mid, r)
drawrectangle(data, ['orange' for x in range(len(data))])