码迷,mamicode.com
首页 > 编程语言 > 详细

Python的快排应有的样子

时间:2018-06-15 20:05:50      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:思路   根据   AC   一点   应该   心情   quic   归并排序   while   

快排算法

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

? 快排是我学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的快排应有的样子

标签:思路   根据   AC   一点   应该   心情   quic   归并排序   while   

原文地址:https://www.cnblogs.com/MartinLwx/p/9188744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!