examples/quicksort.py
author Eugen Sawin <sawine@me73.com>
Tue, 08 Mar 2011 21:45:25 +0100
changeset 15 c0bb7625b557
permissions -rw-r--r--
Merged.
     1 """
     2 Name: quicksort - Quicksort for arrays of unsorted integers
     3 
     4 Description: quicksort applies the Quicksort using static or randomised pivot element selection on an unsorted array of integers.
     5 
     6 Author: Eugen Sawin <sawine@me73.com>
     7 """
     8 
     9 def main():
    10     args = parse_arguments()
    11     array = [int(e.strip()) for e in args.array.split(',')]
    12     random = args.r
    13     print quicksort(array, random)
    14 
    15 from random import randrange
    16 
    17 def quicksort(array, random=False):
    18     if len(array) < 2:
    19         return array    
    20     if random:
    21         p = randrange(len(array))
    22         pivot = array[p]
    23         array[p] = array[-1]
    24         array[-1] = pivot
    25     else:
    26         pivot = array[-1]
    27     left, right = partition(array, pivot)
    28     left = quicksort(left, random)
    29     right = quicksort(right, random)
    30     print left + [pivot] + right
    31     return left + [pivot] + right
    32 
    33 def partition(array, pivot):
    34     left = []
    35     right = []
    36     for e in array[:-1]:
    37         if e < pivot:
    38             left.append(e)
    39         else:
    40             right.append(e)
    41     return left, right
    42 
    43 from argparse import ArgumentParser
    44 
    45 def parse_arguments():
    46     parser = ArgumentParser(description='Applies Quicksort on an unsorted array of integers.')
    47     parser.add_argument('array', help='comma-separated values')
    48     parser.add_argument('-r', action='store_true', help='randomised pivot selection')
    49     return parser.parse_args()
    50 
    51 if __name__ == "__main__":
    52     main()