一行写快排

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

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

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)

 

 

继续待更新。。。

posted @ 2018-11-05 15:34  pupilheart  阅读(153)  评论(0编辑  收藏  举报
小强带你挣小钱v:zln88896

公告

点击 更新中