def quick_sort(li, left, right): #时间复杂度O(n*logn) #PS:最坏的情况下时间复杂度为O(n**2) if left < right: mid = partition(li, left, right) quick_sort(li, left, mid-1) quick_sort(li, mid+1, right) def partition(li, left, right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: #从右边找比tmp小的数 right -= 1 #往左走一位 li[left] = li[right] #把右边的值写到左边空位上 while left < right and li[left] <= tmp: left += 1 li[right] = li[left] #把左边的值写到右边空位上 li[left] = tmp #把tmp归位 return left
def quicksort(array): if len(array) < 2: return array #基线条件:为空或者只包含一个元素的数组是“有序”的 else: pivot = array[0] #由所有小于等于基准值的元素组成的子数组 less = [i for i in array[1:] if i <= pivot] #由所有大于基准值的元素组成的子数组 greater = [i for i in array[1:] if i > pivot] return quicksort(less) + [pivot] + quicksort(greater)
ps:由于如果遇上特殊情况时间复杂度则会由O(n*logn)变成O(n**2),所以中间值或者说基准值可以针对实际情况进行调整。