Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Quicksort with Python

I am totally new to python and I am trying to implement quicksort in it. Could someone please help me complete my code?

I do not know how to concatenate the three arrays and printing them.

def sort(array=[12,4,5,6,7,3,1,15]):     less = []     equal = []     greater = []      if len(array) > 1:         pivot = array[0]         for x in array:             if x < pivot:                 less.append(x)             if x == pivot:                 equal.append(x)             if x > pivot:                 greater.append(x)             sort(less)             sort(pivot)             sort(greater) 
like image 378
user2687481 Avatar asked Aug 15 '13 21:08

user2687481


People also ask

Does Python have quicksort?

Quicksort is not very practical in Python since our builtin timsort algorithm is quite efficient, and we have recursion limits. We would expect to sort lists in-place with list. sort or create new sorted lists with sorted - both of which take a key and reverse argument.

How does quicksort work in Python?

Divide and conquer: Quicksort splits the array into smaller arrays until it ends up with an empty array, or one that has only one element, before recursively sorting the larger arrays. In place: Quicksort doesn't create any copies of the array or any of its subarrays.

What is the fastest sorting algorithm Python?

A best sorting algorithm in python The time complexity of quicksort is O(n log n) in the best case, O(n log n) in the average case, and O(n^2) in the worst case. Quicksort is also considered as the ” fastest” sorting algorithm because it has the best performance in the average case for most inputs.


2 Answers

def sort(array=[12,4,5,6,7,3,1,15]):     """Sort the array by using quicksort."""      less = []     equal = []     greater = []      if len(array) > 1:         pivot = array[0]         for x in array:             if x < pivot:                 less.append(x)             elif x == pivot:                 equal.append(x)             elif x > pivot:                 greater.append(x)         # Don't forget to return something!         return sort(less)+equal+sort(greater)  # Just use the + operator to join lists     # Note that you want equal ^^^^^ not pivot     else:  # You need to handle the part at the end of the recursion - when you only have one element in your array, just return the array.         return array 
like image 188
Brionius Avatar answered Sep 28 '22 07:09

Brionius


Quick sort without additional memory (in place)

Usage:

array = [97, 200, 100, 101, 211, 107] quicksort(array) print(array) # array -> [97, 100, 101, 107, 200, 211] 
def partition(array, begin, end):     pivot = begin     for i in range(begin+1, end+1):         if array[i] <= array[begin]:             pivot += 1             array[i], array[pivot] = array[pivot], array[i]     array[pivot], array[begin] = array[begin], array[pivot]     return pivot    def quicksort(array, begin=0, end=None):     if end is None:         end = len(array) - 1     def _quicksort(array, begin, end):         if begin >= end:             return         pivot = partition(array, begin, end)         _quicksort(array, begin, pivot-1)         _quicksort(array, pivot+1, end)     return _quicksort(array, begin, end) 
like image 34
suquant Avatar answered Sep 28 '22 08:09

suquant