分享Python常用的排序实例

排序算法的稳定性及意义

冒泡排序

复杂度与稳定性

选择排序

插入排序

立即学习“Python免费学习笔记(深入)”;

希尔排序

快速排序

常见排序算法效率比较

排序算法的稳定性及意义

在待排序的序列中,存在具有相同关键字的记录,在排序后这些记录的相对次序保持不变,则排序算法是稳定的。

不稳定排序无法完成多个关键字的排序。例如整数排序,位数越高的数字优先级越高,从高位数到低位数一次排序。那么每一位的排序都需要稳定算法,否则无法得到正确的结果。

即,当要对多个关键词多次排序时,必须使用稳定算法

冒泡排序

Screen Shot 2017-06-11 at 10.23.12 A

def bubble_sort(alist):    """    冒泡排序    """    if len(alist)  alist[i+1]:                alist[i], alist[i+1] = alist[i+1], alist[i]    return alist

登录后复制

复杂度与稳定性

最优时间复杂度:(O(n)) 遍历没有发现任何可以交换的元素,排序结束

最坏时间复杂度:(O(n^2))

稳定性:稳定

选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

插入排序

插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

Screen Shot 2017-06-12 at 7.07.03 P

def insert_sort(alist):    """    插入排序    """    n = len(alist)    if n <= 1:        return alist    # 从第二个位置,即下表为1的元素开始向前插入    for i in range(1, n):        j = i        # 向前向前比较,如果小于前一个元素,交换两个元素        while alist[j]  0:            alist[j], alist[j-1] = alist[j-1], alist[j]            j-=1    return alist

登录后复制

复杂度与稳定性

最优时间复杂度:O((n)) (升序排列,序列已经处于升序状态)

最坏时间复杂度:O((n^2))

稳定性:稳定

希尔排序

希尔排序(Shell Sort)是插入排序的改进, 排序非稳定。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

def shell_sort(alist):        n = len(alist)    gap = n//2        # gap 变化到0之前,插入算法之行的次数    while gap > 0:                # 希尔排序, 与普通的插入算法的区别就是gap步长        for i in range(gap,n):            j = i            while alist[j]  0:                alist[j], alist[j-gap] = alist[j-gap], alist[j]                j-=gap            gap = gap//2    return alist

登录后复制

复杂度与稳定性

最优时间复杂度:(O(n^{1.3})) (不要求本身有序)

最坏时间复杂度:(O(n^2))

稳定性:不稳定

快速排序

快速排序(Quicksort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

步骤为:

从数列中挑出一个元素,称为”基准”(pivot)

重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

常见排序算法效率比较

分享Python常用的排序实例

以上就是分享Python常用的排序实例的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2270255.html

(0)
上一篇 2025年2月27日 11:36:12
下一篇 2025年2月27日 11:36:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python正则的使用方法

    python的正则是通过re模块的支持 匹配的3个函数 match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none; re.match(pattern, string, flags=0) ##fla…

    编程技术 2025年2月27日
    100
  • 利用Python抓取花瓣网美图实例

    一:前言 嘀嘀嘀,上车请刷卡。昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中。这个妹子主页 是动态加载的,如果想获取更…

    2025年2月27日 编程技术
    200
  • python 安装与使用方法介绍

    python 安装                                                                                               windows: 1、下载安装包…

    2025年2月27日 编程技术
    200
  • 用户登录程序怎么实现?

    需求: 1. 用户登录,判断用户名密码是否正确 2. 密码输入三次不对则锁定账号 3. 锁定账号无法登录 分析: 1. 输入账号,判断账号是否存在,即账号是否在账号文件中存在; 2. 如果账号存在,则判断密码是否正确,如果密码正确,则登录成…

    2025年2月27日 编程技术
    200
  • Python 的枚举 Enum

    枚举是常用的功能,看看python的枚举. from enum import EnumMonth = Enum(‘Month’, (‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’, ‘May’, ‘Jun’, ‘Jul’, ‘Aug’…

    编程技术 2025年2月27日
    200
  • 总结python中的一些函数

    python中函数参数有:默认参数、关键字参数、非关键字可变长参数(元组)、关键字可变长参数(字典) :在函数声明时,指定形参的默认值,调用时可不传入改参数(使用默认值)def foo(x): ##默认参数  print ‘x is %s’…

    编程技术 2025年2月27日
    200
  • python之numpy库

    python-numpy csv文件的写入和存取 写入csv文件 csv (comma‐separated value, 逗号分隔值),是一种常见的文件格式,用来存储批量数据。 写入csv文件 np.savetxt(frame, array…

    编程技术 2025年2月27日
    200
  • python http长连接客户端实例教程

    背景: 线上机器,需要过滤access日志,发送给另外一个api期初是单进程,效率太低,改为多进程发送后,查看日志中偶尔会出现异常错误(忘记截图了。。。)总之就是端口不够用了报错 原因: 每一条日志都是一次请求发送给api,短连接产生大量t…

    编程技术 2025年2月27日
    200
  • python装饰器是什么意思?如何使用python装饰器?

    Python—装饰器详解 定义: 本质上是一个函数。作用是用来装饰另一个函数(即被装饰函数),给被装饰函数添加功能。前提是不能改变被装饰函数的源代码和调用方式。这样的一个函数称之为装饰器。 解析: 下面我们话不多说,直接用代码说…

    编程技术 2025年2月27日
    200
  • Python对杂乱文本数据进行处理实例

    一、运行环境 1、python版本 2.7.13 博客代码均是这个版本2、系统环境:win7 64位系统 二、需求 对杂乱文本数据进行处理 部分数据截图如下,第一个字段是原字段,后面3个是清洗出的字段,从数据库中聚合字段观察,乍一看数据比较…

    2025年2月27日 编程技术
    200

发表回复

登录后才能评论