|
|
- """
- Jeffery Russell
- 10-6-18
-
- File Containing Variations of Quick Sort
- """
-
-
- def partition(data):
- """
- Partitions a list of data into three sections
- which are lower, equal, and equal to the pivot
- which is selected to be the last element in the
- list.
- """
- pivot = len(data) -1
- lower, equal, upper = [], [], []
-
- for i in range(0, len(data), 1):
- if data[i] > data[pivot]:
- upper.append(data[i])
- elif data[i] == data[pivot]:
- equal.append(data[i])
- else:
- lower.append(data[i])
-
- return lower, equal, upper
-
-
- def quickSortNormal(data):
- """
- This is the traditional implementation of quick sort
- where there are two recursive calls.
- """
- if len(data) == 0:
- return []
- else:
- less, equal, greater = partition(data)
- return quickSortNormal(less) + equal + quickSortNormal(greater)
-
-
- def quick_sort_accumulation(data, a):
- """
- Implementation of quickSort which forces tail recursion
- by wrapping the second recursive in the tail positioned
- recursive call and added an accumulation variable.
- """
- if len(data) == 0:
- return a
- less, equal, greater = partition(data)
- return quick_sort_accumulation(less,
- equal + quick_sort_accumulation(greater, a))
-
-
- def quicksort(data):
- """
- Wrapper function for quick sort accumulation.
- """
- return quick_sort_accumulation(data, [])
-
-
-
- print quicksort([1,3,1,5,7,9,2,3,5,5,6])
|