コード例 #1
0
ファイル: quick_sort.py プロジェクト: ricol/Python
#!/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))
コード例 #2
0
        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))
コード例 #3
0
ファイル: shell_sort.py プロジェクト: ricol/Python
#!/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))
コード例 #4
0
ファイル: radix_sort.py プロジェクト: ricol/Python
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))
コード例 #5
0
ファイル: heap_sort.py プロジェクト: ricol/Python
    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))
コード例 #6
0
        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)))