Python的快排应有的样子

Posted MartinLwx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的快排应有的样子相关的知识,希望对你有一定的参考价值。

快排算法

? 简单来说就是定一个位置然后,然后把比它小的数放左边,比他大的数放右边,这显然是一个递归的定义,根据这个思路很容易可以写出快排的代码

? 快排是我学ACM路上第一个让我记住的代码,印象很深刻,以前学的是Pascal,写这个要写好长一串,但是因为和归并排序比起来还算短的,也就背下来了。好奇的我点开百科看python的快排代码,就看到了如下代码:

#quick sort
def quickSort(L, low, high):
    i = low 
    j = high
    if i >= j:
        return L
    key = L[i]
    while i < j:
        while i < j and L[j] >= key:
            j = j-1                                                             
        L[i] = L[j]
        while i < j and L[i] <= key:    
            i = i+1 
        L[j] = L[i]
    L[i] = key 
    quickSort(L, low, i-1)
    quickSort(L, j+1, high)
    return L

看完上面的代码后心情复杂,这完全就是我一开始学Pascal的那种代码,只是换成了python的语法来实现,这怎么能体现出python的独特之处呢_(:з」∠)_

这样的代码真的是一点都不Pythonic,真正符合Pythonic的快排代码应该是如下这样的

def quicksort(array):
    if len(array) < 2:
        return array    #如果数组的长度为0或1当然直接返回了
    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)

这样才是优雅的Python啊(′▽`)?

ps.如需转载,请注明出处

喜欢请支持下~

以上是关于Python的快排应有的样子的主要内容,如果未能解决你的问题,请参考以下文章

最优美的快排代码

返回值为int[] 的快排写法

稳定的快排

易错的快排---qsort()

c_cpp 20行的快排(以尾巴为轴,与CLRS保持一致)

淘宝等seo广告里面所讲的三天上首页的快排技术大揭秘