-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbitonic.py
82 lines (74 loc) · 2.57 KB
/
bitonic.py
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import pygame
clk = pygame.time.Clock()
l = 0
def bitonic(draw, grid):
global l
temp = [i.value for i in grid]
# temp = temp[:256]
run = True
slow = True
length = len(temp)
l = length
i = 0
while i < 1:
if not slow:
clk.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False, False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return True, False
if event.key == pygame.K_BACKSPACE:
slow = not slow
bitonic_sort(draw, grid,temp, 0, length, 1, slow)
i += 1
return True, True
def compAndSwap(draw, grid, temp, i, j, dire, slow):
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return True, False
if event.key == pygame.K_BACKSPACE:
slow = not slow
if (dire == 1 and temp[i] > temp[j]) or (dire == 0 and temp[i] < temp[j]):
temp[i], temp[j] = temp[j], temp[i]
for node in range(l):
if grid[node].value != temp[node]:
grid[node].value = temp[node]
grid[node].make_red()
if slow:
draw()
def bitonic_merge(draw, grid, temp, low, cnt, dire, slow):
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return True, False
if event.key == pygame.K_BACKSPACE:
slow = not slow
if cnt > 1:
k = int(cnt / 2)
for i in range(low, low + k):
compAndSwap(draw, grid, temp, i, i + k, dire, slow)
bitonic_merge(draw, grid, temp, low, k, dire, slow)
bitonic_merge(draw, grid, temp, low + k, k, dire, slow)
if not slow:
draw()
def bitonic_sort(draw, grid, temp, low, cnt, dire, slow):
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return True, False
if event.key == pygame.K_BACKSPACE:
slow = not slow
if cnt > 1:
k = int(cnt / 2)
bitonic_sort(draw, grid, temp, low, k, 1, slow)
bitonic_sort(draw, grid, temp, low + k, k, 0, slow)
bitonic_merge(draw, grid, temp, low, cnt, dire, slow)