Quick actions

cmd+k|ctrl+k

Navigation

Languages

quicksort with analysis

Snippet info

Language

Python

Visibility

public

Author

gelliott181

Created

2015-10-07T06:23:13Z

Updated

2015-10-07T07:10:12Z

import timeit
import random

input = []

def partition(input, start, end):
    pivot = start
    comparisons = 0
    
    for i in range(start, end):
        # Decide whether to swap
        if input[i] < input[end]:
            input[i], input[pivot] = input[pivot], input[i]
            pivot += 1
            comparisons += 1
        
    # Swap pivot back where it belongs
    input[pivot], input[end] = input[end], input[pivot]
    
    return {'pivot': pivot, 'comparisons': comparisons}
    
def quicksort(input, start, end):
    
    # Record the comparisons
    comparisons = 0
    
    if start < end:  
        # Pivot contains the time of running the partitioning
        pivot = partition(input, start, end)
        
        # Recursion!
        partition_1 = quicksort(input, start, pivot['pivot'] - 1)
        partition_2 = quicksort(input, pivot['pivot'] + 1, end)
        
        # Sum the comparisons
        # Add one comparison for 
        # "if start < end" up top
        comparisons += 1 + pivot['comparisons'] + partition_1['comparisons'] + partition_2['comparisons']

    output = {'list': input, 'comparisons': comparisons}
    return output

def sort():
    result = quicksort(input, 0, len(input) - 1)
    print(result['comparisons'], end=", ")

def analysis():
    print(len(input), end=", ")
    time = timeit.timeit('sort()', 'from __main__ import sort', number = 1)
    print(time / (10 ** -6))

if __name__ == "__main__":
    input = [random.randrange(1, 101, 1) for _ in range (1000)]
    analysis()
INFO