一行写快排

今天旁边的大神提了句,其实快排可以一行代码实现的,是真的吗?

没想到用这种方法尽然实现了

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)

继续待更新。。。

原文地址:https://www.cnblogs.com/pupilheart/p/9909420.html