def test_run_benchmarks(): generators_list = [random_generator, almost_sorted_generator, reverse_sorted_generator, few_uniq_generator] # generators_list = [random_generator, reverse_sorted_generator] # generators_list = [few_uniq_generator] # sort_func_list = [bubble_sort, insertion_sort, insertion_sort2] sort_func_list = [bubble_sort, insertion_sort, insertion_sort2, selection_sort, shell_sort, \ merge_sort, quick_sort, lambda x: quick_sort(x, splitByMedian), heap_sort, lambda x: radix_sort(x, 1000), intro_sort, timsort] # sort_func_list = [quick_sort, \ # lambda x: quick_sort(x, partition_func=splitByMiddleElement), \ # lambda x: quick_sort(x, partition_func=splitByMedian), \ # lambda x: quick_sort(x, leaf_sort_func=leaf_insertion_sort)] # sort_func_list = [radix_sort, \ # lambda x: radix_sort(x, 2), \ # lambda x: radix_sort(x, 100), # lambda x: radix_sort(x, 1000), # lambda x: radix_sort(x, 10000) # ] for generator in generators_list: print generator for sort_func in sort_func_list: run_until(sort_func, 0.5, generator) for generator in generators_list: print generator for list_size in sorted(result[generator]): sys.stdout.write(str(list_size) + "\t") for sort_func in sort_func_list: if sort_func in result[generator][list_size]: sys.stdout.write("{:.3f}\t".format(result[generator][list_size][sort_func])) else: sys.stdout.write("\t") sys.stdout.write("\n")
all_lists = {} all_lists['ALREADY_SORTED'] = [1, 2, 4, 4, 6, 6, 8, 9] all_lists['REVERSE_SORTED'] = [9, 8, 6, 6, 4, 4, 2, 1] all_lists['FEW_UNIQUE'] = [3, 6, 6, 4, 3, 3, 3, 6, 6, 4] all_lists['RANDOM_ORDER'] = [2, 6, 4, 8, 1, 4, 6, 9] all_lists['BIG_RANGE'] = [170, 45, 75, 90, 802, 2, 24, 66] all_lists['LONG_LIST'] = [ 2, 4, 3, 3, 6, 7, 876, 2, 4, 8, 214, 7, 2, 7, 4, 8, 2, 7, 4, 6, 83, 2, 6, 7, 88, 75, 2, 3, 6, 789, 86, 3, 6, 6, 3, 575, 6, 87, 8, 574 ] all_lists['ZEROES_IN_LIST'] = [ 9, 0, 3, 0, 54, 6, 1, 45, 1, 57, 1, 56, 8, 8, 3, 0 ] all_lists['ALL_SAME_NUMBER'] = [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7] for list_name, number_list in all_lists.iteritems(): print "\nUSING LIST \n\t%s\n\t%s" % (list_name, number_list) print "Insertion sorted output: \n\t", insertion_sort(number_list) print "Bubble sorted output: \n\t", bubble_sort(number_list) print "Selection sorted output: \n\t", selection_sort(number_list) print "Bucket sorted output (using insertion sort and %s buckets): \n\t" % ( buckets), bucket_sort(number_list, 3) print "Counting sorted output: \n\t", counting_sort(number_list) print "Quick sorted output: \n\t", quicksort(number_list) print "Merge sorted output: \n\t", mergesort(number_list) print "Radix sorted output (using counting sort): \n\t", radix_sort( number_list) print "Heap sorted output: \n\t", heapsort(number_list)
from heap_sort import * if __name__ == "__main__": buckets = 3 all_lists = {} all_lists['ALREADY_SORTED'] = [1, 2, 4, 4, 6, 6, 8, 9] all_lists['REVERSE_SORTED'] = [9, 8, 6, 6, 4, 4, 2, 1] all_lists['FEW_UNIQUE'] = [3, 6, 6, 4, 3, 3, 3, 6, 6, 4] all_lists['RANDOM_ORDER'] = [2, 6, 4, 8, 1, 4, 6, 9] all_lists['BIG_RANGE'] = [170, 45, 75, 90, 802, 2, 24, 66] all_lists['LONG_LIST'] = [2,4,3,3,6,7,876,2,4,8,214,7,2,7,4,8,2,7,4,6,83,2,6,7,88,75,2,3,6,789,86,3,6,6,3,575,6,87,8,574] all_lists['ZEROES_IN_LIST'] = [9,0,3,0,54,6,1,45,1,57,1,56,8,8,3,0] all_lists['ALL_SAME_NUMBER'] = [7,7,7,7,7,7,7,7,7,7,7] for list_name, number_list in all_lists.iteritems(): print "\nUSING LIST \n\t%s\n\t%s" %(list_name, number_list) print "Insertion sorted output: \n\t", insertion_sort(number_list) print "Bubble sorted output: \n\t", bubble_sort(number_list) print "Selection sorted output: \n\t", selection_sort(number_list) print "Bucket sorted output (using insertion sort and %s buckets): \n\t" %(buckets), bucket_sort(number_list, 3) print "Counting sorted output: \n\t", counting_sort(number_list) print "Quick sorted output: \n\t", quicksort(number_list) print "Merge sorted output: \n\t", mergesort(number_list) print "Radix sorted output (using counting sort): \n\t", radix_sort(number_list) print "Heap sorted output: \n\t", heapsort(number_list)
def test_all_same_input(self): single_val = rand_list(count=1, min_val=0)[0] data = [single_val]*100 radix_sort(data) for i in range(0, 100): self.assertEqual(single_val, data[i])
def test_all_zero_input(self): data = [0]*100 radix_sort(data) for i in range(0, 100): self.assertEqual(data[i], 0)
def test_array_input(self): data = rand_list(min_val=0) radix_sort(data) for i in range(1, len(data)): self.assertLessEqual(data[i-1], data[i])
def test_double_input(self): data = rand_list(min_val=0, count=2) radix_sort(data) self.assertLessEqual(data[0], data[1])
def test_single_input(self): data = rand_list(min_val=0, count=1) data_cp = data[:] radix_sort(data) self.assertEqual(data, data_cp)
def test_zero_input(self): data = [] radix_sort(data) self.assertEqual(data, [])