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

喜欢请支持下~

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

时间: 2024-08-03 10:49:26

Python的快排应有的样子的相关文章

Python 实现快排

快速排序简介快速排序,又称划分交换排序,从无序队列中挑取一个元素,把无序队列分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.简单来说:挑元素.划分组.分组重复前两步 快速排序原理示意图通过上面对快速排序的简介,我们知道了,快速排序主要包括以下两方面:挑元素划分组.整体递归分组挑元素划分组示意图: 特点:1.因为是无序队列,所以位置可以随机挑2.临时划分一个空间,存放我们挑

觉得python写快排真的简单易懂

记录下自己学习python的学习路 快速排序: def mySort(l): if len(l)<2:#如果列表中只有一个元素就会返回 return l num=l[0]#拿一个元素作为参考元素 startl=[x for x in l[1:] if x <= num ]#使用列表推导式把小于等于参考元素的放入新的列表 endl=[x for x in l[1:] if x > num ]#使用列表推导式把大于参考元素的放入新的列表 #使用递归的方式将排序好的元素拼接为新的列表返回 re

【Python实现快排】 -- 2019-08-09 12:12:36

原文: http://106.13.73.98/__/117/ 挖坑法思路: 取一个元素p(第一个元素),使元素p归位: 列表被p分成两部分,左边的数一定不大于p,右边的数一定不小于p: 递归完成排序. Python代码示例: lst = [5, 7, 4, 3, 1, 2, 9, 8] def quick_sort(d, l, r): if l < r: m = partition(d, l, r) quick_sort(d, l, m - 1) quick_sort(d, m + 1, r)

【Python实现快排】 &#202465;

原文: http://blog.gqylpy.com/gqy/342 " 挖坑法思路: 取一个元素p(第一个元素),使元素p归位: 列表被p分成两部分,左边的数一定不大于p,右边的数一定不小于p: 递归完成排序. Python代码示例: lst = [5, 7, 4, 3, 1, 2, 9, 8] def quick_sort(d, l, r): if l < r: m = partition(d, l, r) quick_sort(d, l, m - 1) quick_sort(d, m

Python随笔-快排

def swap(arr, i, j): temp = arr[i] arr[i] = arr[j] arr[j] = temp def part(arr, beg, end): if end - beg <= 0: return beg v = arr[beg] idx = beg + 1 for x in range(beg+1, end+1): if(arr[x] < v): swap(arr, idx, x) idx += 1 swap(arr, idx-1, beg) return

python 冒泡和快排,不多说【无聊】

1 #-*-coding:utf8-*- 2 import random 3 a=[] 4 b=[] 5 def init_array(): 6 for i in range(10000): 7 v = random.randint(1,10000) 8 a.append(v) 9 b.append(v) 10 11 #冒泡 12 def sort_array(a): 13 for i in range(len(a)): 14 for j in range(i+1,len(a)): 15 if

Python实现排序(冒泡、快排、归并)

Thomas H.Cormen 的<算法导论>上介绍的几个经典排序算法的Python实现. 1.冒泡排序: 简单的两重循环遍历,使最小(最大)的值不断地往上升(下沉)而实现的排序,算法时间为O(n2). 代码如下: 1 def up_sort(a): 2 # 冒泡排序 3 4 a_length = len(a) 5 while True: 6 i = 0 7 j = 1 8 9 while True: 10 if a[i] > a[j]: 11 a[i], a[j] = a[j], a[

python 版 quicksort 快排

今天看了下苹果xml 解析,写了个小demo 心想还是 在博客上写点东西吧,毕竟很久很久都没有上来了 先上个效果图把 接下来 看下 工程目录图吧 本demo 分两种解析模式,一是苹果自带的, 首先先看下苹果自带的吧,工程文件为 NoteXMLParser 文件 ,另一种解析模式 是 NotesTBXMLParser文件 NoteXMLParser.h 文件代码如下 : // // NoteXMLParser.h // TestXML // // Created by choni on 14-5-

用python写个快排

快排过程比较简单就直接上代码了: 1 #!/usr/bin/python3 2 3 def quik_sort(L, left, right): 4 if left <= right: 5 key = L[left] 6 i = left 7 j = right 8 while i < j: 9 while i < j and key <= L[j]: 10 j -= 1 11 L[i] = L[j] 12 while i < j and L[i] <= key: 13