import random def partition(list, first, last): pval = list[first] h = first for k in range(first+1,last+1): if list[k] < pval: h = h+1 (list[h],list[k]) = (list[k],list[h]) # swap! (list[first],list[h]) = (list[h],list[first]) # swap! return h def partition2(list, first, last): i = first j = last+1 pval = list[first] while True: while True: i = i+1 if i > last or list[i] >= pval: break while True: j = j-1 if list[j] <= pval: break if i < j: (list[i],list[j]) = (list[j],list[i]) # swap else: break (list[first],list[j]) = (list[j],list[first]) # swap return j def quicksort(list, first, last): if first < last: p = partition2(list, first, last) #print 'quicksort(', first, ',', last, '), p =', p quicksort(list, first, p-1) quicksort(list, p+1, last) return # creates a random list def random_list(n, min=0, max=9): list = [] # empty list for i in range(n): list.append( random.randint(min, max) ) return list def insertion_sort(list): n = len(list) for i in range(1,n): val = list[i] j = i-1 while j >= 0 and val < list[j]: list[j+1] = list[j] j = j-1 list[j+1] = val return def test_partition(): while True: list = raw_input("Enter a list (or q to quit): ") if list == 'q': break list = eval(list) print list p = partition(list, 0, len(list)-1) print list print "Partition returns:", p return def main(): #list = input('Enter the list: ') list = random_list(16, -9, 9) print list quicksort(list, 0, len(list)-1) print list test_partition() return # testing for merge (ran this first) # list = [ 1, 5, 6, 2, 3, 9 ] # merge(list, 0, 2, 5) # print list main()