#!/usr/bin/env python #-*- coding: utf-8 -*- import random import funs from time import time def quick_sort(data): if len(data) <= 1: return data m = len(data) / 2 pivot = data[m] left, right = [], [] for i in range(len(data)): if i == m: continue if data[i] < pivot: left.append(data[i]) else: right.append(data[i]) return quick_sort(left) + [pivot] + quick_sort(right) if __name__ == "__main__": LEN = int(1e5) print 'generating...' data = [random.randint(0, LEN) for _ in range(LEN)] start = time() print 'sorting...' sorted = quick_sort(data) print 'complete with time cost: ' + str(time() - start) + " seconds" print 'checking...' + str(funs.isSorted(sorted))
raise StopIteration() def simpleHeapSort(data): n = len(data) heap = MaxHeap(n) for item in data: heap.add(item) for i in range(n - 1, -1, -1): data[i] = heap.extract() if __name__ == "__main__": LEN = 100 heap = MaxHeap(LEN) import random for _ in range(LEN): heap.add(random.randint(0, LEN)) print heap heap.show() print "verify..." + str(funs.isHeap(heap._elements, 0)) data = [] print "generating data..." for _ in range(LEN): data.append(random.randint(0, LEN)) print "sorting..." simpleHeapSort(data) print "complete" print "is sorted..." + str(funs.isSorted(data))
#!/usr/bin/env python #-*- coding: utf-8 -*- import funs import random def shellSort(array, n): # Rearrange elements at each n/2, n/4, n/8, ... intervals for gap in range(10, -1, -1): for i in range(gap, n): temp = array[i] j = i while j >= gap and array[j - gap] > temp: array[j] = array[j - gap] j -= gap array[j] = temp LEN = int(1e4) print 'generating...' data = [random.randint(0, LEN) for _ in range(LEN)] print 'sorting...' shellSort(data, len(data)) print 'complete.' print 'checking...' + str(funs.isSorted(data))
import funs def sort(data, numDigits): queues = [[] for _ in range(10)] column = 1 for _ in range(numDigits): for k in data: digit = (k // column) % 10 queues[digit].append(k) i = 0 for q in queues: while len(q) > 0: data[i] = q.pop(0) i += 1 column *= 10 LEN = int(1e5) print "generating..." data = [random.randint(0, LEN) for _ in range(LEN)] start = time() print "sorting..." sort(data, 6) print "complete." print "time: " + str(time() - start) + " seconds" print "checking..." + str(funs.isSorted(data))
if largest != i: data[i], data[largest] = data[largest], data[i] heapify(data, n, largest) def heapSort(data): n = len(data) # Build max heap for i in range(n//2, -1, -1): heapify(data, n, i) # funs.show_tree(data) print "verify heap..." + str(funs.isHeap(data, 0)) for i in range(n-1, 0, -1): # Swap data[i], data[0] = data[0], data[i] # Heapify root element heapify(data, i, 0) if __name__ == "__main__": LEN = int(1e5) print 'generating data...' data = [random.randint(0, LEN) for _ in range(LEN)] print 'sorting...' start = time() heapSort(data) print 'complete with time cost: ' + str(time() - start) + " seconds." print 'verifying...' + str(funs.isSorted(data))
elif data > mid: right.append(data) return quick_sort(left) + [mid] + quick_sort(right) def bubble_sort(list): for i in range(len(list) - 1, -1, -1): for j in range(i): if list[j] > list[j + 1]: list[j], list[j + 1] = list[j + 1], list[j] return list def quick_sort_lamda(list): sort = lambda array: array if len(array) <= 1 else sort([item for item in array[1:] if item <= array[0]]) + [array[0]] + sort([item for item in array[1:] if item > array[0]]) sort(list) return list def generate_data(): NUM = int(1e3) data = [int(random.random() * NUM) for _ in range(NUM)] return data if __name__ == "__main__": for fun in [quick_sort, quick_sort_lamda, bubble_sort]: print("Generating data...") data = generate_data() print("Total: %d" % len(data)) print("Testing %s..." % fun) sorted_data = fun(data) print("Validating...%s...total: %d" % (funs.isSorted(sorted_data), len(sorted_data)))