# Function to find the partition position def partition(array, low, high): # Choose the rightmost element as pivot pivot = array[high] # Pointer for greater element i = low - 1 # Traverse through all elements # compare each element with pivot for j in range(low, high): if array[j] <= pivot: # If element smaller than pivot is found # swap it with the greater element pointed by i i += 1 # Swapping element at i with element at j array[i], array[j] = array[j], array[i] # Swap the pivot element with the greater element specified by i array[i + 1], array[high] = array[high], array[i + 1] # Return the position from where partition is done return i + 1 # Function to perform quicksort def quick_sort(array, low, high): if low < high: # Find pivot element such that # element smaller than pivot are on the left # element greater than pivot are on the right pi = partition(array, low, high) # Recursive call on the left of pivot quick_sort(array, low, pi-1) # Recursive call on the right of pivot quick_sort(array, pi+1, high) # Driver code array = [3, 5, 4, 2, 1, 6] # 10, 7, 8, 9, 1, 5 quick_sort(array, 0, len(array)-1) print(f'Sorted array: {array}')