十大排序算法(Python实现)

python数组排序方法详解(sort, sorted,argsort) 这三个排序方法应对日常工作基本够用 先说一下三者的区别 sort, sorted 是用在 list 数据类型中的排序方法 argsort 是用在 numpy 数据类型中的排序方法( numpy 里也有一个 sort 方法,下面会讲) sort 和 sorted 的区别如下???? 先看两个简单的升序排序,分别使用 sorted 和 sort 方法 # sorted num_list = [1, 8, 2, 3, 10, 4, 5] ordered_list = sorted(num_list) print 阅读详情

十大排序算法(Python实现)

十种常见排序算法可以分为两大类

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。执行计算需要消耗的时间长短。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。执行计算需要的内存空间
参考:https://blog.youkuaiyun.com/weixin_41571493/article/details/81875088

  1. 交换排序
    1.1 冒泡排序(Bubble Sort)
    1.2 快速排序(Quick Sort)
  2. 插入排序
    2.1 简单插入排序(Insert Sort)
    2.2 希尔排序(Shell Sort)
    3.选择排序
    3.1 简单选择排序(Select Sort)
    3.2 堆排序(Heap Sort)
  3. 归并排序
    4.1 二路归并排序(Two-way Merge Sort)
  4. 线性时间非比较类排序
    5.1 计数排序(Counting Sort)
    5.2 桶排序(Bucket Sort)
    5.3 基数排序(Radix Sort)
    在这里插入图片描述

1. 交换排序

1.1 冒泡排序(Bubble Sort)
基本思想:比较相邻的元素。如果第一个比第二个大,就交换它们两个;小的放前面, 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数。
复杂度:
冒泡排序对n个数据操作n-1轮,每轮找出一个最大(小)值。
操作只对相邻两个数比较与交换,每轮会将一个最值交换到数据列首(尾),像冒泡一样。
每轮操作O(n)次,共O(n)轮,时间复杂度O(n^2)。
额外空间开销出在交换数据时那一个过渡空间,空间复杂度O(1)
Code:在这里插入图片描述

def BubbleSort(lst):
    n=len(lst)
    if n<=1:
        return lst
    for i in range (0,n):
        for j in range(0,n-i-1):
            if lst[j]>lst[j+1]:
                (lst[j],lst[j+1])=(lst[j+1],lst[j])
    return lst
x=input("请输入待排序数列:\n")
y=x.split()
arr=[]
for i in  y:
    arr.append(int(i))
arr=BubbleSort(arr)
print(arr)
print("数列按序排列如下:")
for i in arr:
print(i,end=' ')

1.2 快速排序(Quick Sort)

基本思想:从数列中挑出一个元素,称为 “基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
复杂度:
基准值若能把数据分为平均的两块,划分次数O(logn),每次划分遍历比较一遍O(n),时间复杂度O(nlogn)。
额外空间开销出在暂存基准值,O(logn)次划分需要O(logn)个,空间复杂度O(logn)
Code:

十大排序算法总结及Python实现 1、冒泡排序 1.1 思路概述 以升序排序为例,依次对未排序部分两两比较,元素大的放后面,元素小的放前面。每一轮下来,未排序中最大的元素会被冒到未排序区域的最后一个位置,每一轮都会确定当前最大元素的最终位置,该元素确定后,就会从未排序元素中剔除。如果其中某一轮,没有发生元素交换,说明整个未排序数组都已经有序,则完成排序。 1.2复杂度分析 最好的情况是已经有序,则一轮结束,时间复杂度为O(n).最坏情况是逆序排序,则共需要经过n轮排序,每次复杂度为O(n),故时间复杂度为O(n^2).由于是就地.. 阅读详情

相关推荐

Python十大排序算法(亲自实现代码超详细描述)

目录前言背景一、冒泡排序二、选择排序三、插入排序四、希尔排序五、归并排序六、快速排序七、堆排序八、计数排序九、桶排序十、基数排序参考来源后语 前言 你好,我是Dr.叶子,用心写最优美的博客,弹最好听的钢琴! 背景 最近整理知识点,发现在数据结构方面不是很扎实,所有自己重新学习排序算法,亲自利用Python来实现,与大家分享,也提升自己的知识水平!   一、冒泡排序 1. 原理描述: 2. 算法步骤: 3. 演示: 4. 代码实现: 在这里插入代码片   二、选择排序 1

Dr.叶子的博客 2013

Python实现十大经典排序算法(完整代码)

  今天跟小编一起用Python实现十大经典算法吧,分别是以下算法:   冒泡排序   快速排序   选择排序   堆排序   插入排序   希尔排序   归并排序   计数排序   桶排序   基数排序 十大经典排序算法,代码如下。 // 十大经典排序算法代码 #1冒泡排序 # def

weixin_42872907的博客 1588

室内无人机自主定位:融合Mid360激光雷达与光流传感器的无GPS导航实践

本文详细介绍了室内无人机自主定位技术,通过融合Mid360激光雷达与光流传感器实现无GPS导航。文章分析了技术挑战、硬件配置、算法优化及实战调试,展示了在复杂室内环境中如何实现厘米级定位精度,为仓库巡检、隧道勘测等场景提供可靠解决方案。

weixin_30500105的博客 532

【报错】sqli-labs靶场搭建出现“Unable to connect to the database: security”

搭建sqli-labs靶场时,“Unable to connect to the database: security”报错解决

九芒星的博客 2991

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 424

用OpenPose进行单个或多个人体姿态估计

在计算机视觉中,人体姿态估计(关键点检测)是一个很常见的问题,在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,本文要使用的检测方法就是基于OpenPose的人体姿态估计方法。 一、OpenPose简介 OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络(CNN)和监督学习(SL)并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿...

weixin_42709563的博客 8404

STM32 FATFS文件系统按行读取SD卡数据

STM32 SD数据实现按行读取

qq_32216815的博客 7826

2021-3-20组会 无监督训练下的音频分离 (音源分离) Unsupervised Audio Source Separation Using Generative Priors

0. 说明 一片具体论文的综述

ruclion的专栏 1349

终于找到两个稳定好用的Docker镜像加速源,拉取速度提升几十倍!

国内使用Docker经常遇到镜像拉取慢、超时失败的问题🐳 本文分享两个亲测好用的免费镜像加速源⚡ 实测拉取速度从十几分钟缩短到几十秒,稳定性接近100%📊 支持一键配置脚本,支持多平台使用✨

XiaoqiangClub的博客 952

2万字长文:海豚调度器(DolphinScheduler)面试题深入了解

DAG图(有向无环图)是海豚调度器中表示工作流任务依赖关系的一种方式。在DolphinScheduler中,每个任务是一个节点,任务之间的依赖关系通过有向边连接这些节点来表示。无环:保证了工作流的执行顺序是确定的,避免了无限循环的问题。有向:箭头指示了任务的执行方向,即上一个任务的输出可以作为下一个任务的输入。依赖表示:通过图形化界面,用户可以通过拖拽连接线来定义任务之间的先后顺序和依赖关系。并行处理:DAG图可以表示出任务的并行关系,允许多个任务在没有直接依赖关系的情况下同时执行。条件分支。

大模型大数据攻城狮的专栏 1329

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

下一篇: MySQL基本概念,存储引擎,数据类型
one_zero_one
博客等级 码龄7年 30粉丝 141原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值