zoukankan      html  css  js  c++  java
  • 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.如需转载,请注明出处

    喜欢请支持下~

  • 相关阅读:
    01-HTML控件
    08-多线程
    07-Log日志
    06-File-文件
    05-函数式编程
    04-异常使用处理
    03-常用包模块
    02-包
    Java NIO(六) Selector
    Java NIO(四) Scatter/Gather
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/9188744.html
Copyright © 2011-2022 走看看