Skip to content

Commit 8160fff

Browse files
committed
working gui+ added bubble sort
1 parent beb66c7 commit 8160fff

File tree

4 files changed

+142
-1
lines changed

4 files changed

+142
-1
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
*.pyc

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
# Sorting-Algorithm-Visualizer
1+
# Sorting-Algorithm-Visualizer
2+
3+
### Sorting Algorithms Covered:
4+
- Bubble Sort
5+
- Selection Sort
6+
- Insertion Sort
7+
- Merge Sort
8+
- Quick Sort
9+
- Radix Sort

bubble_sort.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import time
2+
3+
def startBubbleSort(data, drawData):
4+
for i in range(len(data)-1):
5+
for j in range(len(data)-i-1):
6+
if data[j]>data[j+1]:
7+
data[j],data[j+1]=data[j+1],data[j]
8+
drawData(data)
9+
time.sleep(0.2)

gui.py

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
from tkinter import *
2+
from tkinter import ttk
3+
from bubble_sort import startBubbleSort
4+
import random
5+
6+
data = []
7+
8+
def visualise(algorithm,speed):
9+
if algorithm=="Bubble sort":
10+
startBubbleSort(data,drawData)
11+
12+
13+
14+
#function to move the main window with the cursor drag
15+
def get_pos(event):
16+
xwin = root.winfo_x()
17+
ywin = root.winfo_y()
18+
startx = event.x_root
19+
starty = event.y_root
20+
ywin = ywin - starty
21+
xwin = xwin - startx
22+
23+
def move_window(event):
24+
root.geometry("800x600" + '+{0}+{1}'.format(event.x_root + xwin, event.y_root + ywin))
25+
startx = event.x_root
26+
starty = event.y_root
27+
28+
topf.bind('<B1-Motion>', move_window)
29+
30+
31+
32+
#function to generate random data
33+
def genData(data_size):
34+
35+
global data
36+
data=[]
37+
for _ in range(int(float(data_size))):
38+
data.append(random.randrange(1,100))
39+
drawData(data)
40+
41+
42+
43+
#function to draw rectangles, 'data' is a list of rectangle heights
44+
def drawData(data):
45+
#clears canvas before drawing new data
46+
canvas.delete("all")
47+
#setting canvas height,width
48+
canvas_h=380
49+
canvas_w=600
50+
#setting the spacing between 2 rectangle
51+
spacing=20
52+
#set the width of 1 rectangle
53+
rectangle_w=(canvas_w-spacing*(len(data)-1))/len(data)
54+
55+
#normalizing the data
56+
for i in range(len(data)):
57+
data[i]=data[i]/max(data)
58+
59+
#drawing the normalized data
60+
for i,height in enumerate(data):
61+
x0=i*rectangle_w+(i+1)*spacing
62+
y0=canvas_h-height*(canvas_h-20)
63+
x1=(i+1)*rectangle_w+(i+1)*spacing
64+
y1=canvas_h
65+
canvas.create_rectangle(x0,y0,x1,y1,fill="grey")
66+
root.update_idletasks()
67+
68+
69+
70+
#starts the gui
71+
def main():
72+
global root
73+
root=Tk()
74+
root.title("Sorting Algorithm Visualizer")
75+
root.overrideredirect(1)
76+
root.maxsize(900,600)
77+
root.config(bg='black')
78+
79+
#to store the selected algorithm
80+
algorithm=StringVar()
81+
82+
#top frame for user input
83+
global topf
84+
topf=Frame(root,width=600, height=200 , bg='grey')
85+
topf.grid(row=0,column=0,padx=10,pady=5)
86+
topf.bind('<Button-1>', get_pos)
87+
88+
#row 1 of topf
89+
Label(topf,text="Select Algorithm",bg='grey').grid(row=0,column=0,padx=5,pady=5,sticky=W)
90+
algorithm_menu=ttk.Combobox(topf,textvariable=algorithm,values=['Bubble sort','Selection Sort'])
91+
algorithm_menu.grid(row=0,column=1,padx=5,pady=5)
92+
algorithm_menu.current(0)
93+
Button(topf,text="Visualise",bg='white',command=lambda : visualise(algorithm.get(),speed.get())).grid(row=0,column=2,padx=5,pady=5)
94+
95+
#row 2 of topf
96+
global size,speed
97+
size=IntVar()
98+
speed=IntVar()
99+
Label(topf,text="Size",bg='grey').grid(row=1,column=0,padx=5,pady=5,sticky=W)
100+
size_scale=ttk.Scale(topf,variable=size,from_=3,to=100,command=genData)
101+
size_scale.grid(row=1,column=1,padx=5,pady=5)
102+
size.set(50)
103+
104+
Label(topf,text="Step Speed (sec)",bg='grey').grid(row=1,column=2,padx=5,pady=5,sticky=W)
105+
speed_scale=ttk.Scale(topf,variable=speed,from_=0.1,to=1.0)
106+
speed_scale.grid(row=1,column=3,padx=5,pady=5)
107+
108+
109+
#canvas for visualisation
110+
global canvas
111+
canvas =Canvas(root,width=600,height=380,bg='black')
112+
canvas.grid(row=1,column=0,padx=10,pady=5)
113+
# data=genData(50)
114+
# drawData(data)
115+
116+
117+
118+
119+
root.mainloop()
120+
121+
if __name__ == "__main__":
122+
main()

0 commit comments

Comments
 (0)