py实现经典排序之冒泡和快排

news2025/1/11 21:02:25

文章目录

  • 0、十大经典排序算法
    • 0.1 关于时间复杂度
    • 0.2 关于稳定性
  • 1、冒泡排序(Bubble Sort)
    • 1.1 冒泡排序简介
    • 1.2 冒泡排序思路
    • 1.3 冒泡排序代码实现
  • 2、快排
    • 2.1 快排简介
    • 2.2 快排思路
    • 2.3 快排代码实现

0、十大经典排序算法

在这里插入图片描述

0.1 关于时间复杂度

  • 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。
  • 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;
  • O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序
  • 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。

0.2 关于稳定性

稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。

不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

1、冒泡排序(Bubble Sort)

1.1 冒泡排序简介

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

1.2 冒泡排序思路

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

  • 针对所有的元素重复以上的步骤,除了最后一个。

  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

1.3 冒泡排序代码实现

def bubble_sort(arr):

    for i in range(len(arr)):
        for j in range(len(arr)):
            if arr[i] < arr[j]:
                arr[i], arr[j] = arr[j], arr[i]
    return arr

2、快排

2.1 快排简介

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。

快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。

2.2 快排思路

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

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

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

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

2.3 快排代码实现

def quick_sort(arr):
    if len(arr) < 2:
        return arr
    else:
        p = arr[0]
        less = [i for i in arr[1:] if i <= p]
        great = [i for i in arr[1:] if i > p]
        return quick_sort(less) + [p] + quick_sort(great)

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

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

相关文章

mysql表操作

文章目录 mysql 操作表创建表创建表实例查看表结构修改表结构删除表结构删除表结构 mysql 操作表 mysql表操作至少有以下俩种&#xff1a; DDL【data definition language】 数据定义语言&#xff0c;用来维护存储数据的结构 代表指令: create, drop, alter DML【data manipu…

2023 conda 安装、配置环境变量、换源

0.先卸载干净再安装 1.下载安装包 这个就不要用镜像下载&#xff0c;官网很快的 Free Download | Anacondahttps://www.anaconda.com/download 2.安装软件 首先 NEXT&#xff0c;接着 I Agree 来到这个页面 选择下面的All Users&#xff0c;再接着往下 选择安装路径 建议…

chatgpt赋能Python-python_print快捷键

Python print快捷键——简化开发效率 作为Python开发者&#xff0c;我们经常需要使用print语句来调试代码。然而&#xff0c;在大型项目中&#xff0c;如果频繁使用print并手动打印变量名称和内容&#xff0c;会浪费大量时间&#xff0c;影响开发效率。此时&#xff0c;使用Py…

Charging management IC---IP5356

0 Preface/foreword 1 规格 2 特性 2.1 电池电压分辨率 内部采用14-bit ADC,最大能识别电压为4.4V&#xff0c;所以分辨率为&#xff1a;4.4/2^14 0.26855 mv 2.2 充电电流 VIN/VBUS充电电流大小&#xff0c;分辨率为&#xff1a;0.671387mA 2.3 放电电流 2.3.1 IOUT1 2.3…

操作系统第三章——内存管理(上)

空有凌云千般志&#xff0c;负了红颜负流年 文章目录 3.1.1 内存的基础知识知识总览什么是内存&#xff1f;有何作用&#xff1f;几种常用的数量单位指令的工作原理绝对装入可重定位装入&#xff08;静态重定位&#xff09;动态重定位从写程序到程序运行链接的三种方式知识回顾…

Qt·事件处理机制

思维导读 一、事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。QT事件的发生和处理成为程序运行的主线&#xff0c;存在于程序整个生命周期。 常见的QT事件类型如下: 键盘事件: 按键按下和松开 鼠标事件: 鼠标移动,鼠标按键的按下和松开 拖放事件: 用鼠…

GPC_UICC Configuration

GPC_UICC Configuration_v2.0.pdf 1 简介 本文档规定了在 ETSI 规范 TS 102 221 [TS 102 221]、TS 102 223 [TS 102 223] 中指定的 UICC 平台上实施 GlobalPlatform 规范的配置要求&#xff0c; TS 102 225 [TS 102 225] 和 TS 102 226 [TS 102 226]。 GlobalPlatform Common …

RK3399平台开发系列讲解(网络篇)DNS协议

🚀返回专栏总目录 文章目录 一、DNS 服务器二、DNS 解析流程三、负载均衡沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DNS 是网络世界的地址簿,可以通过域名查地址,因为域名服务器是按照树状结构组织的,因而域名查找是使用递归的方法,并通过缓存的方式增强性能…

chatgpt赋能Python-python_numpy三角函数

介绍 Python是一种流行的编程语言&#xff0c;可以用于数据科学、机器学习和计算机视觉等领域。其中&#xff0c;numpy是Python中最流行的数值计算库&#xff0c;其主要特点之一是支持各种数学函数。在本文中&#xff0c;我们将关注numpy中的三角函数。 三角函数是数学中的一…

王道操作系统学习 P7-P14

目录 操作系统引导 虚拟机 进程的概念、组成、特征 进程的状态与转换 进程控制 操作系统引导 其实整个的引导过程就是&#xff0c; 从特定主存地址开始&#xff0c;取指令&#xff0c;执行ROM中的引导程序&#xff0c; 将磁盘的主引导记录读入内存&#xff0c;执行磁盘引导…

chatgpt赋能Python-python_penup

Python PenUp: 专业针对绘图需求而设计的Python包 在近几年Python语言的流行性大增&#xff0c;不仅吸引了许多新手开发者&#xff0c;也吸引了许多有经验的工程师&#xff0c;特别是针对绘图领域。Python PenUp 是一个专业针对绘图需求而设计的Python包&#xff0c;可以让工程…

【利用AI让知识体系化】深入浅出Puppeteer

文章目录 1. Puppeteer简介1.1 什么是Puppeteer1.2 它能做什么Puppeteer能够完成以下一些主要的操作&#xff1a;1.3 为什么要使用Puppeteer 2. 安装和配置Puppeteer2.1 安装Puppeteer2.2 配置Puppeteer2.3 第一个Puppeteer程序 3. Puppeteer的基础功能3.1 打开和关闭浏览器3.2…

chatgpt赋能Python-python_pd合并

Python数据分析&#xff1a;探秘pd合并 在Python数据分析的过程中&#xff0c;经常需要对多个数据表进行合并操作以便进行有意义的分析。在Python中&#xff0c;使用pandas库中的merge()函数或者concat()函数可以很容易地完成数据合并。 merge()函数 merge()函数是pandas库中…

shell 脚本命令

文章目录 一.sort命令实验 二.uniq命令命令演示 三.tr命令命令演示 四.cut命令命令演示 五.split命令六.paste命令实验演示 七.eval命令 一.sort命令 以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序比较原则是从首字符向后&#xff0c;依次按ASCII码…

chatgpt赋能Python-python_nonetype

Python Nonetype&#xff1a;什么是Nonetype以及如何处理&#xff1f; 在Python编程中&#xff0c;你可能会遇到NoneType&#xff0c;也就是None类型。如果你不知道NoneType是什么&#xff0c;它可以导致代码中的错误。 什么是NoneType&#xff1f; NoneType表示空值或者没有…

【数据结构】二叉树顺序结构、链式结构的实现、遍历二叉树(前序 中序 后序 层序)

文章目录 1.二叉树结构实现1.1顺序结构的实现1.2链式结构的实现 2.堆的概念和介绍3.二叉树的遍历3.1前序遍历3.2中序遍历3.3后序遍历3.4层序遍历 1.二叉树结构实现 1.1顺序结构的实现 在之前的文章中&#xff0c;我们对二叉树有了一定的了解&#xff0c;这里我们会对二叉树再进…

el-table实现可拖拽移动列和动态排序字段

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f35f;欢迎来到前端初见的博文&#xff0c;本文主要讲解在工作中以一个案例el-table实现可拖拽移动列和动态排序字段&#x1f35f; &#x1f468;‍&#x1f527; 个人主页 : 前端初见 &…

chatgpt赋能Python-python_nanmean

Python的nanmean函数&#xff1a;用于计算数组的平均值 Python引入的nanmean函数是一种快速而有效的计算数组平均值的方法。与其他Python中的平均值函数不同&#xff0c;nanmean函数可以处理NaN值&#xff0c;即缺失值。在数据科学和统计学中&#xff0c;处理缺失值是一个常见…

chatgpt赋能Python-python_nontype

介绍Python中的NoneType: 完整的解释和实例 在Python编程中&#xff0c;有一个特殊的数据类型叫做"NoneType"&#xff0c;它通常被简称为"None"。这个数据类型被用于表示没有值或空值&#xff08;null&#xff09;。在本文中&#xff0c;我们将探索NoneTy…