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.如需转载,请注明出处

喜欢请支持下~

猜你喜欢

转载自www.cnblogs.com/MartinLwx/p/9188744.html