Skip to content

Commit 4bfb1fa

Browse files
Add files via upload
0 parents  commit 4bfb1fa

8 files changed

+257
-0
lines changed

bg.webp

244 KB
Binary file not shown.

bubblesort_code.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import time
2+
3+
def bubble_sort(data, drawrectangle, delay):
4+
for i in range(len(data)-1):
5+
for j in range(len(data)-1):
6+
if data[j] > data[j+1]:
7+
data[j], data[j+1] = data[j+1], data[j]
8+
drawrectangle(data, ['blue' if x == j or x == j+1 else 'red' for x in range(len(data))] )
9+
time.sleep(delay)
10+
drawrectangle(data, ['blue' for x in range(len(data))])
11+
12+
13+
14+
# 0 1 2 3 4 5 6
15+
# 1 5 6 7 9 3 4
16+
17+
#PASSES : 6
18+
# 1 5 6 7 3 4 9
19+
# 1 5 6 3 4 7 9
20+
# 1 5 3 4 6 7 9
21+
# 1 3 4 5 6 7 9
22+
# 1 3 4 5 6 7 9
23+
# 1 3 4 5 6 7 9

colors.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DARK_GRAY = '#65696B'
2+
LIGHT_GRAY = '#C4C5BF'
3+
BLUE = '#0CA8F6'
4+
DARK_BLUE = '#4204CC'
5+
WHITE = '#FFFFFF'
6+
BLACK = '#000000'
7+
RED = '#F22810'
8+
YELLOW = '#F7E806'
9+
PINK = '#F50BED'
10+
LIGHT_GREEN = '#05F50E'
11+
PURPLE = '#BF01FB'
12+
ORANGE = '#FFA500'

insertionsort_code.py

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import time
2+
3+
def insertion_sort(data, drawData, delay):
4+
for i in range(len(data)):
5+
temp = data[i]
6+
k = i
7+
while k > 0 and temp < data[k-1]:
8+
data[k] = data[k-1]
9+
k -= 1
10+
data[k] = temp
11+
drawData(data, ['yellow' if x == k or x == i else 'blue' for x in range(len(data))])
12+
time.sleep(delay)
13+
14+
drawData(data, ['blue' for x in range(len(data))])

main.py

+129
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
from tkinter import *
2+
from tkinter import ttk
3+
from PIL import ImageTk,Image
4+
from colors import*
5+
import random
6+
7+
# Importing algorithms
8+
from bubblesort_code import bubble_sort
9+
from insertionsort_code import insertion_sort
10+
from selectionsort_code import selection_sort
11+
from mergesort_code import merge_sort
12+
from quicksort_code import quick_sort
13+
14+
# Main window
15+
window = Tk()
16+
window.state("zoomed")
17+
window.title("DSA Project")
18+
window.geometry("750x600")
19+
#bg image
20+
bg_org=Image.open('bg.webp')
21+
bg=ImageTk.PhotoImage(bg_org)
22+
bglabel=Label(window,image=bg)
23+
bglabel.place(x=0,y=0)
24+
25+
#global
26+
s='Sorting Algorithm Visualiser'
27+
text=''
28+
count=0
29+
def slider():
30+
global text,count,s
31+
if count==len(s):
32+
count=0
33+
text=''
34+
text=text+s[count]
35+
sliderLabel.config(text=text)
36+
count=count+1
37+
sliderLabel.after(150,slider)
38+
39+
#Slider
40+
sliderLabel=Label(window,font=('arial',35,'bold','italic'),foreground='royalblue',width=30)
41+
sliderLabel.place(x=300,y=25)
42+
slider()
43+
algorithm_name = StringVar()
44+
data = []
45+
algo_list = ['Bubble Sort', 'Insertion Sort', 'Selection Sort', 'Merge Sort', 'Quick Sort']
46+
47+
48+
# Drawing the numerical array as bars
49+
def drawData(data, colorArray):
50+
canvas.delete("all")
51+
canvas_height = 360
52+
canvas_width = 1300
53+
bar_width = canvas_width / (len(data) + 1)
54+
border_offset = 30
55+
spacing = 10
56+
normalized_array = [ i / max(data) for i in data]
57+
for i, height in enumerate(normalized_array):
58+
#top left coordinates
59+
x0 = i * bar_width + border_offset + spacing
60+
y0 = canvas_height - height * 340
61+
#bottom right coordinates
62+
x1 = (i + 1) * bar_width + border_offset
63+
y1 = canvas_height
64+
canvas.create_rectangle(x0,y0,x1,y1,fill=colorArray[i])
65+
canvas.create_text(x0+2,y0,anchor=SW,text=str(data[i]))
66+
67+
window.update_idletasks()
68+
69+
70+
# Randomly generate array
71+
def generate():
72+
global data
73+
lowest = int(lowest_Entry.get())
74+
highest = int(highest_Entry.get())
75+
size = int(arrsize_Entry.get())
76+
77+
data = []
78+
for i in range(size):
79+
data.append(random.randrange(lowest, highest+1))
80+
81+
drawData(data,['red' for x in range(len(data))])
82+
83+
84+
def sort():
85+
global data
86+
87+
if algo_menu.get() == 'Bubble Sort':
88+
bubble_sort(data, drawData, sortingspeed.get())
89+
elif algo_menu.get() == 'Selection Sort':
90+
selection_sort(data, drawData, sortingspeed.get())
91+
elif algo_menu.get() == 'Insertion Sort':
92+
insertion_sort(data, drawData, sortingspeed.get())
93+
elif algo_menu.get() == 'Merge Sort':
94+
merge_sort(data, 0, len(data)-1, drawData, sortingspeed.get())
95+
elif algo_menu.get() == 'Quick Sort':
96+
quick_sort(data, 0, len(data)-1, drawData, sortingspeed.get())
97+
98+
99+
### User interface ###
100+
UI_frame = Frame(window, width= 700, height=300, bg='green')
101+
UI_frame.place(x=450,y=95)
102+
103+
canvas = Canvas(window,width=1340, height=350, bg='grey')
104+
canvas.place(x=10,y=340)
105+
106+
l1 = Label(UI_frame, text="Algorithm Choice : ")
107+
l1.grid(row=0, column=0, padx=10, pady=10)
108+
109+
algo_menu = ttk.Combobox(UI_frame, textvariable=algorithm_name, values=algo_list,width=10) #ttk library
110+
algo_menu.grid(row=0, column=1, padx=5, pady=5)
111+
algo_menu.current(0)
112+
113+
sortingspeed = Scale(UI_frame, from_=0.1, to=2.0, length=100, digits=2, resolution=0.2, orient=HORIZONTAL, label="Sorting Speed ")
114+
sortingspeed.grid(row=0, column=2, padx=10, pady=10)
115+
116+
Button(UI_frame, text="Start Sorting",font=('bold'), command=sort, bg='red',height=5).grid(row=0, column=3, padx=5, pady=5)
117+
118+
lowest_Entry = Scale(UI_frame, from_=5, to=20, resolution=1, orient=HORIZONTAL, label="Lower Limit")
119+
lowest_Entry.grid(row=1, column=0, padx=5, pady=5)
120+
121+
highest_Entry = Scale(UI_frame, from_=20, to=100, resolution=1, orient=HORIZONTAL, label="Upper Limit")
122+
highest_Entry.grid(row=1, column=1, padx=5, pady=5)
123+
124+
arrsize_Entry = Scale(UI_frame, from_=5, to=25, resolution=1, orient=HORIZONTAL, label="Array size")
125+
arrsize_Entry.grid(row=1, column=2, padx=5, pady=5)
126+
127+
Button(UI_frame, text="Current Array",font=('bold'), command=generate, bg='blue',height=5).grid(row=1, column=3, padx=10, pady=10)
128+
129+
window.mainloop()

mergesort_code.py

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import time
2+
3+
def merge(data, start, mid, end, drawData, delay):
4+
p = start
5+
q = mid + 1
6+
tempArray = []
7+
8+
for i in range(start, end+1):
9+
if p > mid:
10+
tempArray.append(data[q])
11+
q+=1
12+
elif q > end:
13+
tempArray.append(data[p])
14+
p+=1
15+
elif data[p] < data[q]:
16+
tempArray.append(data[p])
17+
p+=1
18+
else:
19+
tempArray.append(data[q])
20+
q+=1
21+
22+
for p in range(len(tempArray)):
23+
data[start] = tempArray[p]
24+
start += 1
25+
26+
def merge_sort(data, start, end, drawData, delay):
27+
if start < end:
28+
mid = int((start + end) / 2)
29+
merge_sort(data, start, mid, drawData, delay)
30+
merge_sort(data, mid+1, end, drawData, delay)
31+
32+
merge(data, start, mid, end, drawData, delay)
33+
34+
drawData(data, ["PURPLE" if x >= start and x < mid else "YELLOW" if x == mid
35+
else "pink" if x > mid and x <=end else 'blue' for x in range(len(data))])
36+
time.sleep(delay)
37+
38+
drawData(data, ['blue' for x in range(len(data))])

quicksort_code.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import time
2+
3+
def partition(data, start, end, drawData, delay):
4+
i = start + 1
5+
pivot = data[start]
6+
7+
for j in range(start+1, end+1):
8+
if data[j] < pivot:
9+
data[i], data[j] = data[j], data[i]
10+
i+=1
11+
data[start], data[i-1] = data[i-1], data[start]
12+
return i-1
13+
14+
def quick_sort(data, start, end, drawData, delay):
15+
if start < end:
16+
pivot_position = partition(data, start, end, drawData, delay)
17+
quick_sort(data, start, pivot_position-1, drawData, delay)
18+
quick_sort(data, pivot_position+1, end, drawData, delay)
19+
20+
drawData(data, ["PURPLE" if x >= start and x < pivot_position else "YELLOW" if x == pivot_position
21+
else "pink" if x > pivot_position and x <=end else 'blue' for x in range(len(data))])
22+
time.sleep(delay)
23+
24+
drawData(data, ['blue' for x in range(len(data))])

selectionsort_code.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import time
2+
3+
def selection_sort(data, drawData, delay):
4+
for i in range(len(data)-1):
5+
minimum = i
6+
for k in range(i+1, len(data)):
7+
if data[k] < data[minimum]:
8+
minimum = k
9+
10+
data[minimum], data[i] = data[i], data[minimum]
11+
drawData(data, ["YELLOW" if x == minimum or x == i else 'blue' for x in range(len(data))] )
12+
time.sleep(delay)
13+
14+
drawData(data, ['blue' for x in range(len(data))])
15+
16+
# 0 1 2 3 4 5 6
17+
# 1 5 6 7 9 3 4

0 commit comments

Comments
 (0)