今天旁边的大神提了句,其实快排可以一行代码实现的,是真的吗?
没想到用这种方法尽然实现了
def quicksortshort(arr):
return [] if arr==[] else quicksortshort([y for y in arr[1:] if y<arr[0]]) + [arr[0]]+ quicksortshort([y for y in arr[1:] if y>=arr[0]] )
不过,该一行写快排由于切片的存在,频繁的复制会增加本身的时间复杂度。
时间复杂度小的方式【nlogn】
def partition(li, left, right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: right -= 1 li[left] = li[right] while left < right and li[left] <= tmp: left += 1 li[right] = li[left] li[left] = tmp return left def quick_sort(li, left, right): if left < right: mid = partition(li, left, right) quick_sort(li, left, mid-1) quick_sort(li, mid+1, right) # 测试 import random li = list(range(10000)) random.shuffle(li) quick_sort(li)
继续待更新。。。