def radix_sort(list_): u"""Return a sorted list by the radix sort algorithm.""" depth = 0 while True: bins = {} depth += 1 for num in list_: dc = 10**(depth - 1) bin_key = ((num % (10**depth)) - (num % dc)) / dc bins.setdefault(bin_key, []).append(num) list_ = [] for bin_ in sorted(bins.keys()): for val in bins[bin_]: list_.append(val) if len(bins[bin_key]) == len(list_) and depth > 0: break return list_ if __name__ == '__main__': from data_structures import time_func time_func(radix_sort)
if left[0] <= right[0]: next = left.pop(0) else: next = right.pop(0) elif len(left) > 0: next = left.pop(0) else: next = right.pop(0) sorted_.append(next) return sorted_ if __name__ == "__main__": from data_structures import time_func time_func(merge_sort) # from functools import partial # import timeit # reps = 1000 # length = 1000 # print "\nAll tests run with " + str(reps) + " repetitions.\n" # unsorted_list = [1,5,3,8,6,2,0,4,7,9] # t= timeit.Timer(partial(merge_sort, unsorted_list)) # print "A list of length ten takes: " + str(t.timeit(reps)) + " seconds to sort.\n" # unsorted_list = range(length) # t= timeit.Timer(partial(merge_sort, unsorted_list)) # print "An already sorted list of length " + str(length) + " takes: " + str(t.timeit(reps)) + " seconds to sort.\n" # unsorted_list = range(length)
if len(left) > 0 and len(right) > 0: if left[0] <= right[0]: next = left.pop(0) else: next = right.pop(0) elif len(left) > 0: next = left.pop(0) else: next = right.pop(0) sorted_.append(next) return sorted_ if __name__ == '__main__': from data_structures import time_func time_func(merge_sort) # from functools import partial # import timeit # reps = 1000 # length = 1000 # print "\nAll tests run with " + str(reps) + " repetitions.\n" # unsorted_list = [1,5,3,8,6,2,0,4,7,9] # t= timeit.Timer(partial(merge_sort, unsorted_list)) # print "A list of length ten takes: " + str(t.timeit(reps)) + " seconds to sort.\n" # unsorted_list = range(length) # t= timeit.Timer(partial(merge_sort, unsorted_list)) # print "An already sorted list of length " + str(length) + " takes: " + str(t.timeit(reps)) + " seconds to sort.\n" # unsorted_list = range(length)
def insertion_sort(unsorted): u"""Return list sorted via insertion sort.""" for i, val in enumerate(unsorted): while val < unsorted[i-1] and i > 0: unsorted[i] = unsorted[i-1] i -= 1 unsorted[i] = val return unsorted if __name__ == '__main__': from data_structures import time_func time_func(insertion_sort)
def radix_sort(list_): u"""Return a sorted list by the radix sort algorithm.""" depth = 0 while True: bins = {} depth += 1 for num in list_: dc = 10 ** (depth-1) bin_key = ((num % (10 ** depth))-(num % dc))/dc bins.setdefault(bin_key, []).append(num) list_ = [] for bin_ in sorted(bins.keys()): for val in bins[bin_]: list_.append(val) if len(bins[bin_key]) == len(list_) and depth > 0: break return list_ if __name__ == '__main__': from data_structures import time_func time_func(radix_sort)
def insertion_sort(unsorted): u"""Return list sorted via insertion sort.""" for i, val in enumerate(unsorted): while val < unsorted[i - 1] and i > 0: unsorted[i] = unsorted[i - 1] i -= 1 unsorted[i] = val return unsorted if __name__ == '__main__': from data_structures import time_func time_func(insertion_sort)