# The QuickSort function implementation
def quickSort(arr, low, high):
if low < high:
# pi is the partition return index of pivot
# Choose the pivot
pivot = arr[high]
# Index of smaller element and indicates
# the right position of pivot found so far
i = low - 1
# Traverse arr[low..high] and move all smaller
# elements to the left side. Elements from low to
# i are smaller after every iteration
for j in range(low, high):
if arr[j] < pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
# Move pivot after smaller elements and
# return its position
arr[i + 1], arr[high] = arr[high], arr[i + 1]
pi = i + 1
# Recursion calls for smaller elements
# and greater or equals elements
quickSort(arr, low, pi - 1)
quickSort(arr, pi + 1, high)
# Main driver code
if __name__ == "__main__":
arr = [10, 7, 8, 9, 1, 5]
n = len(arr)
quickSort(arr, 0, n - 1)
for val in arr:
print val,
IyBUaGUgUXVpY2tTb3J0IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCmRlZiBxdWlja1NvcnQoYXJyLCBsb3csIGhpZ2gpOgogICAgaWYgbG93IDwgaGlnaDogIAogICAgICAgICMgcGkgaXMgdGhlIHBhcnRpdGlvbiByZXR1cm4gaW5kZXggb2YgcGl2b3QKICAgICAgICAjIENob29zZSB0aGUgcGl2b3QKICAgICAgICBwaXZvdCA9IGFycltoaWdoXQoKICAgICAgICAjIEluZGV4IG9mIHNtYWxsZXIgZWxlbWVudCBhbmQgaW5kaWNhdGVzCiAgICAgICAgIyB0aGUgcmlnaHQgcG9zaXRpb24gb2YgcGl2b3QgZm91bmQgc28gZmFyCiAgICAgICAgaSA9IGxvdyAtIDEKCiAgICAgICAgIyBUcmF2ZXJzZSBhcnJbbG93Li5oaWdoXSBhbmQgbW92ZSBhbGwgc21hbGxlcgogICAgICAgICMgZWxlbWVudHMgdG8gdGhlIGxlZnQgc2lkZS4gRWxlbWVudHMgZnJvbSBsb3cgdG8KICAgICAgICAjIGkgYXJlIHNtYWxsZXIgYWZ0ZXIgZXZlcnkgaXRlcmF0aW9uCiAgICAgICAgZm9yIGogaW4gcmFuZ2UobG93LCBoaWdoKToKICAgICAgICAgICAgaWYgYXJyW2pdIDwgcGl2b3Q6CiAgICAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgICAgICAgIGFycltpXSwgYXJyW2pdID0gYXJyW2pdLCBhcnJbaV0KCiAgICAgICAgIyBNb3ZlIHBpdm90IGFmdGVyIHNtYWxsZXIgZWxlbWVudHMgYW5kCiAgICAgICAgIyByZXR1cm4gaXRzIHBvc2l0aW9uCiAgICAgICAgYXJyW2kgKyAxXSwgYXJyW2hpZ2hdID0gYXJyW2hpZ2hdLCBhcnJbaSArIDFdCiAgICAgICAgcGkgPSBpICsgMQoKICAgICAgICAjIFJlY3Vyc2lvbiBjYWxscyBmb3Igc21hbGxlciBlbGVtZW50cwogICAgICAgICMgYW5kIGdyZWF0ZXIgb3IgZXF1YWxzIGVsZW1lbnRzCiAgICAgICAgcXVpY2tTb3J0KGFyciwgbG93LCBwaSAtIDEpCiAgICAgICAgcXVpY2tTb3J0KGFyciwgcGkgKyAxLCBoaWdoKQoKIyBNYWluIGRyaXZlciBjb2RlCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBhcnIgPSBbMTAsIDcsIDgsIDksIDEsIDVdCiAgICBuID0gbGVuKGFycikKCiAgICBxdWlja1NvcnQoYXJyLCAwLCBuIC0gMSkKCiAgICBmb3IgdmFsIGluIGFycjoKICAgICAgICBwcmludCB2YWws