Skip to content

Instantly share code, notes, and snippets.

Created July 30, 2014 13:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/7335a642359c296c1172 to your computer and use it in GitHub Desktop.
Save anonymous/7335a642359c296c1172 to your computer and use it in GitHub Desktop.
graphic_sorting.py
from scene import *
import random
import time
import datetime
import thread
TIMING_DELAY=0.0001 #SECONDS
class MyScene (Scene):
def setup(self):
self.list, self.colors = self.generate_random_list()
self.choice_made = False
self.num_comparisons = 0
self.num_swaps = 0
s = datetime.datetime.now()
self.elapsed_time = s - s
self.done_sorting = False
self.compare_index = 0
def draw(self):
background(0, 0, 0)
self.draw_title()
self.draw_list()
self.draw_buttons()
self.draw_comparisons()
self.draw_compare_index()
self.draw_swaps()
self.draw_time()
def touch_ended(self, touch):
if not self.choice_made:
if touch.location in self.sel_sort_button:
self.choice_made = True
thread.start_new_thread(self.selection_sort_list, ())
if touch.location in self.bub_sort_button:
self.choice_made = True
thread.start_new_thread(self.bubble_sort_list, ())
return
if self.done_sorting:
if touch.location in self.shuffle_button:
self.list, self.colors = self.generate_random_list()
self.choice_made = False
self.done_sorting = False
def draw_title(self):
text, size = render_text('Sorting Comparator', font_size=35)
image(text, self.size.w*0.5-size.w*0.5, self.size.h-50)
def draw_list(self):
region = self.size.w - 100
offset = 50
for index in range(len(self.list)):
fill(self.colors[index][0], self.colors[index][1], self.colors[index][2])
x = region / len(self.list) * index + offset
y = 400
w = region / len(self.list) - 1
h = self.list[index] * 5
rect(x, y, w, h)
def draw_compare_index(self):
region = self.size.w - 100
diameter = region/len(self.list)
x = 50 + diameter * self.compare_index
fill(1.0, 1.0, 1.0)
ellipse(x, 399-diameter, diameter-1, diameter-1)
def draw_comparisons(self):
msg = "Comparisons: %d" % self.num_comparisons
text, size = render_text(msg, font_size=20)
image(text, 50, 350)
def draw_swaps(self):
msg = "Swaps: %d" % self.num_swaps
text, size = render_text(msg, font_size=20)
image(text, self.size.w*0.5-size.w*0.5, 350)
def draw_time(self):
msg = "Seconds elapsed: %d" % self.elapsed_time.seconds
text, size = render_text(msg, font_size=20)
image(text, self.size.w-size.w-50, 350)
def generate_random_list(self):
n = datetime.datetime.now()
self.elapsed_time = n-n
self.num_comparisons = 0
self.num_swaps = 0
self.compare_index = 0
lst = [x+1 for x in range(100)]
random.shuffle(lst)
colors = [Color(random.random(), random.random(), random.random()) for x in range(100)]
return lst, colors
def bubble_sort_list(self):
self.num_comparisons = 0
self.start_time = datetime.datetime.now()
for y in xrange(len(self.list)-1, 0, -1):
for x in xrange(y):
self.compare_index = x
self.num_comparisons += 1
if self.list[x] < self.list[x+1]:
done = False
self.num_swaps += 1
self.list[x], self.list[x+1] = self.list[x+1], self.list[x]
self.colors[x], self.colors[x+1] = self.colors[x+1], self.colors[x]
time.sleep(TIMING_DELAY)
self.elapsed_time = datetime.datetime.now() - self.start_time
self.done_sorting = True
def selection_sort_list(self):
self.num_comparisons = 0
self.start_time = datetime.datetime.now()
for x in xrange(len(self.list)):
biggest = x
for y in xrange(x, len(self.list)):
self.compare_index = y
self.num_comparisons += 1
if self.list[y] > self.list[biggest]:
biggest = y
time.sleep(TIMING_DELAY)
self.list[x], self.list[biggest] = self.list[biggest], self.list[x]
self.colors[x], self.colors[biggest] = self.colors[biggest], self.colors[x]
self.num_swaps += 1
self.elapsed_time = datetime.datetime.now() - self.start_time
self.done_sorting = True
def draw_buttons(self):
if self.done_sorting:
text, size = render_text('Shuffle List', font_size=25)
image(text, self.size.w*0.5-size.w*0.5, 185)
self.shuffle_button = Rect(self.size.w*0.5-size.w*0.5, 185, size.w, size.h)
if self.choice_made:
return
text, size = render_text('Press here for Selection Sort', font_size=25)
image(text, self.size.w*0.5-size.w*0.5, 225)
self.sel_sort_button = Rect(self.size.w*0.5-size.w*0.5, 225, size.w, size.h)
text, size = render_text('Press here for Bubble Sort', font_size=25)
image(text, self.size.w*0.5-size.w*0.5, 150)
self.bub_sort_button = Rect(self.size.w*0.5-size.w*0.5, 150, size.w, size.h)
run(MyScene(), orientation=PORTRAIT)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment