import random
def quicksort(arr, L, R):
    if(L < R):
        swap(arr,L + int(random.random()*(R-L+1)), R)
        low,high=partition(arr, L, R)
        quicksort(arr, L ,low)
        quicksort(arr, high, R)
def partition(arr, L, R):
        less = L -1
        more = R
        while(L < more):
            if arr[L] < arr[R]:
                less += 1
                swap(arr, L,less)
                L += 1
            elif arr[L] > arr[R]:
                more -= 1
                swap(arr, L, more)
            else:
                L+=1
        swap(arr, more,  R)
        return less,more+1
def swap(arr, i, j):
    arr[i],arr[j]=arr[j],arr[i]
lst = [22,312,22,5,23,7,22]
quicksort(lst,0,6)
print(lst)