Generate 50 random numbers and draw them as bars. Following the steps of selection sort algorithm and redraw the bar every single step to show how bubble sort works.
Compare against Bubble Sort and Insertion Sort. Which is the fastest? Which is the slowest?
Source Code:
import turtle
import random
import time
screen = turtle.Screen()
screen.setup(1000,1000)
screen.tracer(0,0)
screen.title('Selection Sort Animation - PythonTurtle.Academy')
turtle.speed(0)
turtle.hideturtle()
def draw_bar(x,y,w,h):
turtle.up()
turtle.goto(x,y)
turtle.seth(0)
turtle.down()
turtle.begin_fill()
turtle.fd(w)
turtle.left(90)
turtle.fd(h)
turtle.left(90)
turtle.fd(w)
turtle.left(90)
turtle.fd(h)
turtle.left(90)
turtle.end_fill()
def draw_bars(v,n,current):
x = -400
w = 800/n
for i in range(n):
if i == current: turtle.fillcolor('red')
else: turtle.fillcolor('gray')
draw_bar(x,-400,w,v[i])
x += w
def select_smallest(v,i,k):
smallest = v[i]
smallest_index = i
for j in range(i+1,k):
if v[j] < smallest:
smallest = v[j]
smallest_index = j
turtle.clear()
draw_bars(v,n,j)
turtle.update()
return smallest_index
def selection_sort(v,k):
for i in range(k-1):
j = select_smallest(v,i,k) # smallest index from ith to last
v[i], v[j] = v[j], v[i] # swap with the smallest
turtle.clear()
draw_bars(v,n,i)
turtle.update()
n = 50
v = [0] * n
for i in range(n):
v[i] = random.randint(1,800)
t1 = time.time()
selection_sort(v,n)
turtle.clear()
draw_bars(v,n,-1)
turtle.update()
t2 = time.time()
print('elapsed time=', t2-t1)