diff --git a/pydatastructs/linear_data_structures/__init__.py b/pydatastructs/linear_data_structures/__init__.py index 1f660038d..2af218ed4 100644 --- a/pydatastructs/linear_data_structures/__init__.py +++ b/pydatastructs/linear_data_structures/__init__.py @@ -25,6 +25,7 @@ brick_sort, brick_sort_parallel, heapsort, - matrix_multiply_parallel + matrix_multiply_parallel, + quick_sort ) __all__.extend(algorithms.__all__) diff --git a/pydatastructs/linear_data_structures/algorithms.py b/pydatastructs/linear_data_structures/algorithms.py index f5eb2358d..743a9c318 100644 --- a/pydatastructs/linear_data_structures/algorithms.py +++ b/pydatastructs/linear_data_structures/algorithms.py @@ -9,7 +9,8 @@ 'brick_sort', 'brick_sort_parallel', 'heapsort', - 'matrix_multiply_parallel' + 'matrix_multiply_parallel', + 'quick_sort' ] def _merge(array, sl, el, sr, er, end, comp): @@ -360,3 +361,83 @@ def matrix_multiply_parallel(matrix_1, matrix_2, num_threads): i, j).result() return C + +def _partition(array,low,high,comp): + pivot = array[low] + i = low+1 + j = high + while i<=j: + while _comp(array[i],pivot,comp) and i>> from pydatastructs import OneDimensionalArray, quick_sort + >>> arr = OneDimensionalArray(int,[3, 2, 1]) + >>> quick_sort(arr) + >>> [arr[0], arr[1], arr[2]] + [1, 2, 3] + + References + ========== + + .. [1] https://en.wikipedia.org/wiki/Quicksort + .. [2] https://cs.stanford.edu/people/eroberts/courses/soco/projects/2008-09/tony-hoare/quicksort.html + """ + start = kwargs.get("start",0) + end = kwargs.get("end",len(array)-1) + comp = kwargs.get("comp",lambda u,v:u<=v) + stack = [] + stack.append(start) + stack.append(end) + + while len(stack)!=0: + end = stack.pop() + start = stack.pop() + s = _partition(array,start,end,comp) + if s-1 > start: + stack.append(start) + stack.append(s-1) + if s+1