python实现插入排序、快速排序

python实现插入排序、快速排序

        • 算法步骤:
      • Python实现插入排序
      • 快速排序
        • 算法步骤:
      • Python实现快速排序
      • 算法时间复杂度

插入排序是一种简单直观的排序算法。它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法步骤:
  1. 从第一个元素开始,认为它已经被排序。
  2. 取出下一个元素,在已排序的元素序列中从后向前扫描。
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置。
  4. 重复步骤3,直到找到已排序的元素小于或等于新元素的位置。
  5. 将新元素插入到该位置后。
  6. 重复步骤2-5,直到所有元素均排序。

Python实现插入排序

def insertion_sort(lst):for i in range(1, len(lst)):key = lst[i]j = i - 1while j >= 0 and key < lst[j]:lst[j + 1] = lst[j]j -= 1lst[j + 1] = keyreturn lst# 示例
lst = [12, 11, 13, 5, 6]
sorted_lst = insertion_sort(lst)
print("排序后的列表:", sorted_lst)

快速排序

快速排序是一种分治算法,通常被认为是目前最快的排序算法之一。它的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个过程可以递归进行,以达到整个数据变成有序序列。

算法步骤:
  1. 从数列中挑出一个元素,称为“基准”(pivot)。
  2. 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

Python实现快速排序

def quick_sort(lst):if len(lst) <= 1:return lstelse:pivot = lst[len(lst) // 2]left = [x for x in lst if x < pivot]middle = [x for x in lst if x == pivot]right = [x for x in lst if x > pivot]return quick_sort(left) + middle + quick_sort(right)# 示例
lst = [3, 6, 8, 10, 1, 2, 1]
sorted_lst = quick_sort(lst)
print("排序后的列表:", sorted_lst)

算法时间复杂度

  • 插入排序的时间复杂度为O(n^2),适用于小规模数据或基本有序的数据。
  • 快速排序的平均时间复杂度为O(n log n),最差时间复杂度为O(n^2),但由于其常数因子较小,且具有较好的性能,因此在实际应用中广泛使用。

通过以上实现,可以看到这两种排序算法在不同场景下的适用性。插入排序算法简单直观,适用于小规模数据;快速排序则效率高,适用于大规模数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式8种原则

1. 开放封闭 允许对类进行扩展&#xff0c;但禁止更改。 2. 依赖倒置 高层模块&#xff08;稳定的&#xff09;不应该依赖于低层模块&#xff08;变化的&#xff0c;如子类&#xff09;。二者都应该依赖于抽象。抽象不应该依赖于实现&#xff0c;实现应该依赖于抽象。 3. 里…

ES证书过期替换方案

简介&#xff1a; 在生产环境中&#xff0c;Elasticsearch 集群的证书可能会因为过期而导致集群无法正常工作。为了避免这种情况的发生&#xff0c;我们需要及时更新证书&#xff0c;并保证更新证书的过程中保持 Elasticsearch 集群的高可用性和数据安全性。 集群环境 ES集群版…

【内网穿透】打洞笔记

文章目录 前言原理阐述公网sshfrp转发服务 实现前提第一步&#xff1a;第二步第三步第四步 补充第五步&#xff08;希望隧道一直开着&#xff09;sftp传数据&#xff08;嫌云服务器上的网太慢&#xff09; 前言 租了一个云服务器&#xff0c;想用vscode的ssh远程连接&#xff…

3.5【C语言】signed和unsigned

其实第3篇 http://t.csdnimg.cn/sdP8f 的数据类型并没有写全 完整版本&#xff1a;short [int]&#xff0c;[signed] short [int] &#xff0c;unsigned short [int]&#xff1b;int&#xff0c;[signed] int&#xff0c;unsigned int&#xff1b; long [int]&#xff0c;[sin…

C++ LP 开头字符串自定义类型

LPSTR LPCSTR Win32 和 VC 所使用的一种字符串数据类型。 LPCSTR 被定义成是一个指向以’\0’结尾的常量字符的指针。 LPWSTR wchar_t 字符串。 LPCWSTR 是一个指向 unicode 编码字符串的 32 位指针&#xff0c;所指向字符串是 wchar 型&#xff0c;而不是 char 型。 LP…

【前端】表单密码格式—校验。

如图&#xff1a;实现表单输入密码和确认密码的时候进行表单校验。 实现方式&#xff1a; 1.在代码的data里面定义&#xff0c;函数验证的方法。如图所示,代码如下 【代码】如下&#xff1a; const validatePassword (rule, value, callback) > {if (value ) {callback(n…

南京邮电大学统计学课程实验3 用EXCEL进行方差分析 指导

一、实验描述 实验目的 1、学会在计算机上利用EXCEL进行单因素方差分析&#xff1b; 2、学会在计算机上利用EXCEL进行无重复的双因素方差分析。 二、实验环境 实验中使用以下软件和硬件设备 &#xff08;1&#xff09;Windows XP操作系统&#xff1b; &#xff08;2&am…

【启明智显分享】Model3驱动高效农业灌溉:10.1寸电阻触摸屏,RGB50pin高清接口

走出信息茧房&#xff0c;打破刻板印象&#xff0c;科技日新月异的时代&#xff0c;农业已经不再是传统意义上的“面朝黄土背朝天”。在现代农业管理中&#xff0c;科技的应用至关重要&#xff0c;一块高清触摸显示屏能够极大地提升农业劳动效率&#xff0c;实现科学的农田管理…

RTX 50系列显卡功耗信息曝光:5090型号功耗直逼500W,5060增幅显著引热议

随着NVIDIA即将推出的Blackwell RTX 50系列显卡预计在今年年底或明年年初震撼登场&#xff0c;业界对其性能提升的期待已然高涨&#xff0c;尽管AMD显卡可能难以匹敌这一飞跃。然而&#xff0c;在性能跃升的同时&#xff0c;消费者对于显卡功耗是否会进一步攀升的担忧也随之而来…

昇思25天学习打卡营第12天|Vision Transformer图像分类、SSD目标检测

Vision Transformer&#xff08;ViT&#xff09;简介 近些年&#xff0c;随着基于自注意&#xff08;Self-Attention&#xff09;结构的模型的发展&#xff0c;特别是Transformer模型的提出&#xff0c;极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩…

git 代理错误拒绝连接

git 克隆项目拒绝连接 现象 Failed to connect to 127.0.0.1 port 15732: 拒绝连接 问题描述 代理错误解决方法 取消代理 git config --global --unset http.proxy

Windows安装Nacos【超详细图解】

目录 一、下载 Nacos 二、解压 Nacos 三、编辑配置文件 四、创建数据库 五、启动 Nacos 六、进入控制台 一、下载 Nacos Nacos v2.3.2 官方网址 二、解压 Nacos 三、编辑配置文件 主要修改数据库用户名、密码、鉴权是否开启、key value和token # # Copyright 1999-2021 …

elasticsearch中模板的创建和使用

template是es集群内快速生成批量索引的一种快捷方式。 官方解释&#xff1a; 模板是一种在索引创建时配置索引的方法。 7.x之后ES支持两种模板创建方式&#xff0c;一种是传统的或者叫普通的创建方式&#xff0c;即在一次请求中指定 mappings, settings, and aliases等模板的内…

Template execution failed: ReferenceError: name is not defined

问题 我们使用了html-webpack-plugin&#xff08;webpack&#xff09;进行编译html&#xff0c;导致的错误。 排查结果 连接地址 html-webpack-plugin版本低(2.30.1)&#xff0c;html模板里面不能有符号&#xff0c;注释都不行 // var reg new RegExp((^|&)${name}([^&…

基于LAMMPS模拟岩石表面润湿性

润湿性是指不相混的两相流体与岩石固相表面接触时&#xff0c;其中一相流体沿着岩石表面铺开的现象&#xff0c;该相称为润湿相。润湿性一般采用接触角法来确定&#xff0c;通常根据水在固体表面的角度θ来定义系统的润湿性&#xff0c;接触角为0&#xff5e;75为水润湿&#x…

40、PHP 实现对称的二叉树(含源码)

题目&#xff1a; PHP 实现对称的二叉树 描述&#xff1a; 请实现一个函数&#xff0c;用来判断一颗二叉树是不是对称的。 注意&#xff0c;如果一个二叉树同此二叉树的镜像是同样的&#xff0c;定义其为对称的。 <?php/*class TreeNode{var $val;var $left NULL;var $r…

WPF项目实战视频《一》(主要为WPF基础知识)

1.WPF布局&#xff1a; Grid&#xff0c;stackPanel&#xff0c;wrapPanel&#xff0c;DockPanel&#xff0c;UniformGrid Grid 按行列布局&#xff0c; Grid.ColumnDefinitions列&#xff0c;Grid.RowDefinitions行 Grid.Row“0” Grid.Column“0” stackPanel 默认从上往下排…

Hadoop3:MR程序压测实验

一、环境要求 内存&#xff1a;128G CPU&#xff1a;32C 磁盘&#xff1a;8T 注&#xff1a;一个虚拟机不超过150G磁盘尽量不要执行这段代码 二、案例 1、需求 使用Sort程序评测MapReduce 2、操作步骤 1、使用RandomWriter来产生随机数&#xff0c;每个节点运行10个Map任…

LabVIEW机器学习实现外观检测

介绍如何利用LabVIEW平台结合机器学习技术实现对被测样品的外观检测。详细说明了硬件选择、算法使用、操作步骤以及注意事项。 硬件选择 工业相机&#xff1a;高分辨率工业相机&#xff08;如Basler、FLIR等&#xff09;用于采集样品的图像。 照明设备&#xff1a;均匀的LED照…

C++ 多态:探索对象的动态行为

C 多态&#xff1a;探索对象的动态行为 在C中&#xff0c;多态性是一种强大的特性&#xff0c;它允许我们通过基类指针或引用来调用派生类的方法。多态性不仅增加了程序的灵活性&#xff0c;还使得代码更加易于扩展和维护。本文将深入探讨C中的多态性&#xff0c;包括静态多态&…