Create quickSort.py
Browse files- quickSort.py +32 -0
quickSort.py
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import time
|
2 |
+
from colors import *
|
3 |
+
|
4 |
+
|
5 |
+
def partition(data, start, end, draw_data, time_tick):
|
6 |
+
i = start + 1
|
7 |
+
pivot = data[start]
|
8 |
+
for j in range(start+1, end+1):
|
9 |
+
if data[j] < pivot:
|
10 |
+
data[i], data[j] = data[j], data[i]
|
11 |
+
i += 1
|
12 |
+
data[start], data[i-1] = data[i-1], data[start]
|
13 |
+
return i - 1
|
14 |
+
|
15 |
+
|
16 |
+
import random
|
17 |
+
def rand_partition(data, start, end, draw_data, time_tick):
|
18 |
+
rand = start + random.randrange(end - start + 1)
|
19 |
+
data[rand], data[start] = data[start], data[rand]
|
20 |
+
return partition(data, start, end, draw_data, time_tick)
|
21 |
+
|
22 |
+
|
23 |
+
def quick_sort(data, start, end, draw_data, time_tick):
|
24 |
+
if start < end:
|
25 |
+
#pivot_position = partition(data, start, end, draw_data, time_tick)
|
26 |
+
pivot_position = rand_partition(data, start, end, draw_data, time_tick)
|
27 |
+
quick_sort(data, start, pivot_position-1, draw_data, time_tick)
|
28 |
+
quick_sort(data, pivot_position+1, end, draw_data, time_tick)
|
29 |
+
draw_data(data, [PURPLE if x >= start and x < pivot_position else YELLOW if x ==
|
30 |
+
pivot_position else DARK_BLUE if x > pivot_position and x <= end else BLUE for x in range(len(data))])
|
31 |
+
time.sleep(time_tick)
|
32 |
+
draw_data(data, [BLUE for x in range(len(data))])
|