python笔记 之 快速排序

news/2024/5/19 22:35:37 标签: 算法, 列表, python, 快速排序, 排序算法

使用Python语言实现快速排序算法

算法的最坏运行时间表示为: Θ ( n 2 ) \Theta(n^2) Θ(n2)

算法的期望运行时间表示为: Θ ( n lg ⁡ n ) \Theta(n\lg{n}) Θ(nlgn)

快速排序算法算法如下:

python">'''
quick_sort(A,p,r)
    if p<r
        q=partition(A,p,r)
        quit_sort(A,p,q-1)
        quit_sort(A,q+1,r)

partition(A,p,r)
    x=A[r]
    i=p-1
    for j=p to r-1
        if A[j]<=x
            i=i+1
            exchange A[i] with A[j]
    exchange A[i+1] with A[r]
    return i+1
'''

Python算法:

python">def quick_sort(A,p,r):
    '''
    quick_sort用递归法实现对数组进行排序(正序)
    A是一个仅包含数值型的列表
    p,r是列表A的下标,且满足p<=r'''
    if p<r:
        q=partition(A,p,r)
        quick_sort(A,p,q-1)
        quick_sort(A,q+1,r)


def partition(A,p,r):
    '''
    partition为快速排序的关键函数,用来对数组进行原址重拍
    partition选择数组最后一个元素作为主元x,并围绕x把数组划分成4个(可能为空)区域
    for循环体内的下标k在每个区域满足以下性质:
    1,若p<=k<=i,则A[k]<=x
    2,若i+1<=k<=j-1,则A[k]>x
    3,若k=r,则A[k]>x
    '''
    x=A[r]
    i=p-1
    for j in range(p,r):
        if A[j]<=x:
            i=i+1
            A[i],A[j]=A[j],A[i]
    A[i+1],A[r]=A[r],A[i+1]
    return i+1        

运行结果:

python">a = [9,8,7,5,5,6,13,2,3,12]
print(a)
quick_sort(a,0,len(a)-1)
print(a)

[9, 8, 7, 5, 5, 6, 13, 2, 3, 12]
[2, 3, 5, 5, 6, 7, 8, 9, 12, 13]

http://www.niftyadmin.cn/n/752435.html

相关文章

Pyhont笔记 之 快速排序(随机化版本)

使用Python语言实现快速排序算法(随机化版本) 算法的期望运行时间表示为&#xff1a;Θ(nlgn) (随机化版本)快速排序算法伪算法如下&#xff1a; 本章使用了“使用Python语言实现快速排序算法”中的函数&#xff0c;具体请参考&#xff1a; 使用Python语言实现快速排序算法 …

Xshell关闭后,Java应用程序、Tomcat服务等可以后台运行

Xshell中用Java命令运行Java应用程序&#xff0c;或者用./运行sh执行文件后&#xff0c;如果关闭Xshell&#xff0c;即使Xshell会留有一个后台进程&#xff0c;应用程序也会关闭&#xff0c;可以靠执行nohup 你的命令 &来解决问题&#xff0c;这个命令意味着在后台运行应用…

Python笔记 之 jieba模块

更详细的解释及举例请查看官方文本&#xff1a;jieba参考文档 jieba分词 支持四种分词模式&#xff1a; 精确模式&#xff0c;试图将句子最精确地切开&#xff0c;适合文本分析&#xff1b; 全模式&#xff0c;把句子中所有的可以成词的词语都扫描出来, 速度非常快&#xff0…

解决jps不显示Java进程,jconsole、jvisualvm无法使用,hsperfdata_%UserName%下无进程文件系列问题

jps&#xff08;Java Virtual Machine Process Status Tool&#xff09;可以显示当前的Java进程信息。 可使用的命令&#xff1a; jps [-q] [-mlvV] [<hostid>] <hostid>: <hostname>[:<port>] cmd下输入jps只显示当前Java进程的进程号…

Python笔记 之 矩阵元素选取

按需求取矩阵指定元素 生成一个由0&#xff0c;1组成的4x4矩阵 import numpy matrixnumpy.random.randint(0,2,size(4,4)) #matrixnumpy.random.randint(0,high2,size(4,4)) print(matrix)输出结果 [[0 1 0 1][0 0 0 1][0 1 0 0][0 0 0 1]]显示矩阵的形状 print(matrix.sha…

解决jvisualvm的监视器CPU显示不受本JVM支持,jconsole连接失败系列问题

结合&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/93739387 IDE以管理员权限启动&#xff0c;然后运行Java程序&#xff0c;才能被jvm工具捕捉到当前Java进程。那么&#xff0c;jvisualvm的监视器CPU显示不受本JVM支持&#xff0c;jconsole连接失败的问题…

最后一次作业--课程总结

java学的不太好&#xff0c;有好多东西还不会&#xff0c;也遇到了很多难题&#xff0c;只希望自己能加深印象&#xff0c;先好好打好基础&#xff0c;为以后的java学习做铺垫。 虽然很难&#xff0c;听不懂&#xff0c;但是还是有信心的&#xff0c;加油吧&#xff01; 转载于…

Python笔记 之 利用余弦相似性进行文本选择

使用Python语言利用余弦相似度进行文本选择 余弦相似性简介 余弦相似性相关知识请参考&#xff1a;百度百科(余弦相似度) 二维余弦相似度计算公式&#xff1a;cos(θ)cos(\theta)cos(θ)x1x2y1y2x12y12∗x22y22{x_1x_2y_1y_2}\over{\sqrt {x_1^2y_1^2}*\sqrt {x_2^2y_2^2}}x…