《python算法教程》Day9 - 快速排序法快速排序法简介代码展示

这是《python算法教程》第9篇读书笔记,笔记的主要内容为快速排序法。

快速排序法简介

快速排序法运用分治法的方式,将需要排序的序列细分成小序列进行排序。 思路如下:将序列划分为大于序列第一个值、小于序列第一元素的两个序列,以及用于作为比较基准的序列的第一个元素。之后递归调用上述思路,将拆分出来的两个序列分别按照上述思路进行拆分,直到需要排序的序列剩下一个元素。之后将拆分的序列组合起来。

代码展示

以下展示快速排序的两种代码方案。 第一种是每次划分序列,均生成两个新的序列。 第二种则是通过调换元素间的顺序,以使得用于对比的基准元素的左边的元素均小于基准元素,基准元素右边的元素大于基准元素。

方案1

#快速排序
import numpy as np

def partition(seq):
    lo=[x for x in seq if x<seq[0]]
    hi=[x for x in seq if x>seq[0]]
    return lo ,seq[0],hi
    
def quickSort(seq):
    if len(seq)<=1:
        return seq
    lo,pi,hi=partition(seq)
    return quickSort(lo) + [pi] + quickSort(hi)

#生成随机整数序列,用于测试排序算法
seq=np.random.randint(0,100,100)
print(seq)
res=quickSort(seq)
print(res)

方案2

#快速排序
import numpy as np

def quickSort(seq):
    if len(seq)<=1:
        return seq
    i=0
    j=len(seq)-1
    k=seq[0]
    while i<j:
        while i<j and k<=seq[j]:
            j-=1
        seq[i],seq[j]=seq[j],seq[i]
        while i<j and k>=seq[i]:
            i+=1
        seq[i],seq[j]=seq[j],seq[i]
    #print(seq[0:i],seq[i+1:len(seq)])
    return quickSort(seq[0:i]) +[k]+quickSort(seq[i+1:len(seq)])

#生成随机整数序列,用于测试排序算法
seq=[x for x in np.random.randint(0,100,50)]
print(seq)
res=quickSort(seq)
print(res)

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=11flspuoq5iwm

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

入门 | 一文带你了解Python集合与基本的集合运算

了解 Python 集合: 它们是什么,如何创建它们,何时使用它们,什么是内置函数,以及它们与集合论操作的关系

1050
来自专栏技术杂谈

给出一组非负整数,重新排序组成最大的数

先把对比的数字转成字符,拼接后再转成整数进行大小对比,即 int(a+b) 与 int(b+a) 进行降序排列。代码1。

6038
来自专栏用户画像

7.6.2 内部排序算法的应用

1)若n较小(N<=50),则可以采用直接插入排序或简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因而当记录本身信息量较大时,用简单选择排序...

701
来自专栏数据结构与算法

BZOJ2212: [Poi2011]Tree Rotations(线段树合并)

可以证明,对于\(m\)个仅有一个元素,权值范围在\([1, n]\)的线段树合并的复杂度为\(mlogn\)

742
来自专栏ACM算法日常

字符串的距离(动态规划) - leetcode 72

,因为在刷leetcode的动态规划专题。动态规划虽然定义很简单,但是对于复杂的动态规划题目,很多时候还是很棘手的。

852
来自专栏java工会

java冒泡排序和快速排序

2833
来自专栏desperate633

LintCode 排颜色 II题目分析代码

给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序。

962
来自专栏静默虚空的博客

排序算法系列

概述 概念 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。 排序分为内部排序和外部排序。 若整个排序过程不需要访问...

2297
来自专栏小樱的经验随笔

洛谷 P1019 单词接龙【经典DFS,温习搜索】

P1019 单词接龙 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”...

3796
来自专栏数据结构与算法

洛谷P3273 [SCOI2011]棘手的操作

题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第...

3287

扫码关注云+社区

领取腾讯云代金券