-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsortingvisualiser.py
98 lines (72 loc) · 3.06 KB
/
sortingvisualiser.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
from tkinter import *
from tkinter import ttk
import random
from BubbleSort import bubble_sort
from quicksort import quick_sort
from mergesort import merge_sort
root = Tk()
root.title('Sorting Visualiser')
root.maxsize(900,600)
root.config(bg= 'black')
selected_alg= StringVar()
data= []
def drawData(data, colorArray):
canvas.delete("all")
c_height= 380
c_width= 600
x_width= c_width / (len(data)+1)
offset= 30
spacing= 10
normalizedData=[i/ max(data) for i in data]
for i, height in enumerate(normalizedData):
x0=i*x_width + offset + spacing
y0= c_height - height * 340 #topleft point
x1=(i+1)* x_width + offset #bottomright point
y1= c_height
canvas.create_rectangle(x0, y0, x1, y1, fill=colorArray[i])
canvas.create_text(x0+2, y0, anchor = SW, text= str(data[i]))
root.update_idletasks()
def generate():
global data
minVal= int(minEntry.get())
maxVal=int(maxEntry.get())
size= int(sizeEntry.get())
data=[]
for _ in range(size):
data.append(random.randrange(minVal, maxVal +1))
drawData(data,['red' for x in range(len(data))])
def StartAlgorithm():
global data
if not data:
return
if algMenu.get()=='Quick Sort':
quick_sort(data, 0, len(data)-1, drawData, speedScale.get())
elif algMenu.get()=='Bubble Sort':
bubble_sort(data, drawData, speedScale.get())
elif algMenu.get()=='Merge Sort':
merge_sort(data, drawData, speedScale.get())
drawData(data, ['green' for x in range(len(data))])
UI_frame= Frame(root, width= 600, height= 200, bg= 'black')
UI_frame.grid(row=0, column=0, padx=10, pady= 5)
canvas= Canvas(root, width= 600, height= 380, bg= 'white')
canvas.grid(row=1, column= 0, padx= 10, pady=5)
#row0
Label(UI_frame, text= "Algorithm: ", bg= 'white').grid(row=0, column=0, padx=5, pady=5, sticky=E)
algMenu= ttk.Combobox(UI_frame, textvariable=selected_alg,values=['Bubble Sort', 'Quick Sort','Merge Sort'])
algMenu.grid(row=0, column=1, padx= 5, pady= 5)
algMenu.current(0)
speedScale= Scale(UI_frame, from_= 0.1, to= 5.0, length= 200, digits= 2, resolution= 0.2, orient= HORIZONTAL, label="Select Speed [s]")
speedScale.grid(row= 0, column=2, padx=5, pady=5)
Button(UI_frame, text= "Start", command= StartAlgorithm, bg= 'green').grid(row= 0, column=3, padx=5, pady= 5)
#row1
#Label(UI_frame, text= "Size: ", bg= 'grey').grid(row=1, column=0, padx=5, pady=5, sticky=W)
sizeEntry= Scale(UI_frame, from_= 3, to= 25,resolution= 1, orient= HORIZONTAL, label="Data Size")
sizeEntry.grid(row=1, column=0, padx=5, pady=5)
#Label(UI_frame, text= "Min Value: ", bg= 'grey').grid(row=1, column=2, padx=5, pady=5, sticky=W)
minEntry= Scale(UI_frame, from_= 0, to= 10, resolution= 1, orient= HORIZONTAL, label="Minimum Value")
minEntry.grid(row=1, column=1, padx=5, pady=5)
#Label(UI_frame, text= "Max Value: ", bg= 'grey').grid(row=1, column=4, padx=5, pady=5, sticky=W)
maxEntry= Scale(UI_frame, from_= 10, to=100 ,resolution= 1, orient= HORIZONTAL, label="Maximum Value")
maxEntry.grid(row=1, column=2, padx=5, pady=5)
Button(UI_frame, text= "Generate", command= generate, bg= 'green').grid(row=1, column=3, padx=5, pady= 5)
root.mainloop()