def qsort(arr, start, end): if start > end: return def partition(arr, start, end): pivot = arr[start] i = start+1 while i <= end: if pivot < arr[i]: arr[i], arr[end] = arr[end], arr[i] end -= 1 else: i += 1 if end > start: arr[start], arr[end] = arr[end], arr[start] return end mid = partition(arr, start, end) qsort(arr, start, mid-1) qsort(arr, mid+1, end) arr = [] qsort(arr,0, -1) print arr from random import randint for k in range(1, 100): arr = [randint(0,100) for i in range(k)] arr2 = (list(arr)) qsort(arr, 0, len(arr)-1) arr2.sort() for j in range(0, len(arr)): assert arr[j] == arr2[j]