moved all Python sorting algorithms into 1 folder
This commit is contained in:
50
Sorting Algorithms/quick_sort.py
Normal file
50
Sorting Algorithms/quick_sort.py
Normal file
@@ -0,0 +1,50 @@
|
||||
#---------------------------------------
|
||||
# Quick Sort
|
||||
#---------------------------------------
|
||||
def quick_sort(A):
|
||||
quick_sort2(A, 0, len(A)-1)
|
||||
|
||||
def quick_sort2(A, low, hi):
|
||||
if hi-low < threshold and low < hi:
|
||||
quick_selection(A, low, hi)
|
||||
elif low < hi:
|
||||
p = partition(A, low, hi)
|
||||
quick_sort2(A, low, p - 1)
|
||||
quick_sort2(A, p + 1, hi)
|
||||
|
||||
def get_pivot(A, low, hi):
|
||||
mid = (hi + low) // 2
|
||||
s = sorted([A[low], A[mid], A[hi]])
|
||||
if s[1] == A[low]:
|
||||
return low
|
||||
elif s[1] == A[mid]:
|
||||
return mid
|
||||
return hi
|
||||
|
||||
def partition(A, low, hi):
|
||||
pivotIndex = get_pivot(A, low, hi)
|
||||
pivotValue = A[pivotIndex]
|
||||
A[pivotIndex], A[low] = A[low], A[pivotIndex]
|
||||
border = low
|
||||
|
||||
for i in range(low, hi+1):
|
||||
if A[i] < pivotValue:
|
||||
border += 1
|
||||
A[i], A[border] = A[border], A[i]
|
||||
A[low], A[border] = A[border], A[low]
|
||||
|
||||
return (border)
|
||||
|
||||
def quick_selection(x, first, last):
|
||||
for i in range (first, last):
|
||||
minIndex = i
|
||||
for j in range (i+1, last+1):
|
||||
if x[j] < x[minIndex]:
|
||||
minIndex = j
|
||||
if minIndex != i:
|
||||
x[i], x[minIndex] = x[minIndex], x[i]
|
||||
|
||||
A = [5,9,1,2,4,8,6,3,7]
|
||||
print(A)
|
||||
quick_sort(A)
|
||||
print(A)
|
||||
Reference in New Issue
Block a user