当前位置: 首页 > news >正文

5种排序算法

文章目录

  • 一,排序算法时间复杂度比较
  • 二,插入排序
  • 三,冒泡排序
  • 四,快速排序
  • 五,堆排序
  • 六,二分归并排序

一,排序算法时间复杂度比较

算法最坏情况下平均情况下
插入排序O(n² )O(n²)
冒泡排序O(n²)O(n²)
快速排序O(n²)O(nlogn)
堆排序O(nlogn)O(nlogn)
二分归并排序O(nlogn)O(nlogn)

二,插入排序

假设原始序列为:[5,7,1,3,6,2,4]
首先假设第一个元素5已经排好,然后插入第二个元素7但是7比5大所以7放在5的右边,接着是第三个元素1,1比7小所以再7左边并且1比5小所以放在5的左边。第四个元素3于7比较比7小在7左边并且比5小所以在5左边但是3比1小所以插入到1和5之间,其他的类似。。。。

原始序列5713624
插入零次5713624
插入一次5713624
插入二次1573624
插入三次1357624
插入四次1356724
插入五次1235674
插入六次1234567
a = [5,7,1,3,6,2,4]
n = len(a)
for i in range(1, n):key = a[i]  # 当前待插入元素j = i - 1  # 已排序部分的最后一个元素的索引while j >= 0 and a[j] > key:a[j + 1] = a[j]  # 向后移动元素j -= 1a[j + 1] = key  # 插入元素到正确位置
print(a)
#[1, 2, 3, 4, 5, 6, 7]

三,冒泡排序

假设原始序列为:[5,7,1,3,6,2,4]
首先5和7比较,5比7小不交换顺序,7和1比较,7比1大交换顺序,7和3比较,7比3大交换顺序,7和6比较7比6大交换顺序,7和4比较,7比4大交换顺序。以此类推

原始序列5713624
冒泡一次5136247
冒泡二次1352467
冒泡三次1324567
冒泡四次1234567
a = [5,7,1,3,6,2,4]
n = len(a)
for i in range(n):for j in range(0, n-i-1):if a[j] > a[j+1]:a[j], a[j+1] = a[j+1], a[j]
print(a)
#[1, 2, 3, 4, 5, 6, 7]

四,快速排序

假设原始序列为:[5,7,1,3,6,2,4]
首先以第一个元素5为划分的标准,从前面找第一个比5大的从后面找第一个比5小的交换位置,然后再找下一个比大的和比5小的交换位置。第二次交换是发生在两个相邻的元素之间做的所以说2前面的都比5小,6后面的都比5大所以2的位置是第一个元素5的位置,然后交换2和5的位置,这样5的位置就定下来了,再分别对两边递归调用同样的方法。

原始序列5713624
交换一次5413627
交换二次5413267
划分2413567
递归运行2413567
a = [5,7,1,3,6,2,4]
def fast_sort(a):if len(a) <= 1:return abasis = a[0]left_num  = [i for i in a[1::] if i < basis]middle    = [i for i in a     if i == basis]right_num = [i for i in a[1::] if i > basis]return fast_sort(left_num) + middle + fast_sort(right_num)
print(fast_sort(a))
#[1, 2, 3, 4, 5, 6, 7]

五,堆排序

pass

六,二分归并排序

它将待排序的列表递归地分成两个子列表,直到每个子列表只包含一个元素。然后,将这些子列表按照顺序合并,形成一个有序的列表。
假设原始序列为:[5,7,1,3,6,2,4]
首先先把序列一份为二 (标注和没标注的),然后对每个子列里面也分别进行二分归并排序,然后把已经排好的子数合并(两个序列的首元素比较哪个小就把哪个拿走,知道一个数组空了就把另一个数组全部接在后面)。

原始序列5713624
归分5413627
递归排序1345267
开始组合1345267
345267
新数组1
34567
新数组12
4567
新数组123
567
新数组1234
67
新数组12345
新数组1234567
a = [5, 7, 1, 3, 6, 2, 4]def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = arr[:mid]right = arr[mid:]left = merge_sort(left)right = merge_sort(right)return merge(left, right)def merge(left, right):merged = []i = j = 0while i < len(left) and j < len(right):if left[i] <= right[j]:merged.append(left[i])i += 1else:merged.append(right[j])j += 1while i < len(left):merged.append(left[i])i += 1while j < len(right):merged.append(right[j])j += 1return mergedprint(merge_sort(a))

相关文章:

5种排序算法

文章目录 一&#xff0c;排序算法时间复杂度比较二&#xff0c;插入排序三&#xff0c;冒泡排序四&#xff0c;快速排序五&#xff0c;堆排序六&#xff0c;二分归并排序 一&#xff0c;排序算法时间复杂度比较 算法最坏情况下平均情况下插入排序O(n )O(n)冒泡排序O(n)O(n)快速…...

TCP/IP(七)TCP的连接管理(四)

一 全连接队列 nginx listen 参数backlog的意义 nginx配置文件中listen后面的backlog配置 ① TCP全连接队列概念 全连接队列: 也称 accept 队列 ② 查看应用程序的 TCP 全连接队列大小 实验1&#xff1a; ss 命令查看 LISTEN状态下 Recv-Q/Send-Q 含义附加&#xff1a;…...

LeetCode【84】柱状图中的最大矩形

题目&#xff1a; 思路&#xff1a; https://blog.csdn.net/qq_28468707/article/details/103682528 https://www.jianshu.com/p/2b9a36a548fa 清晰 代码&#xff1a; public int largestRectangleArea(int[] heights) {int[] heightadd new int[heights.length 1];for (i…...

C++:关于模拟实现vector和list中迭代器模块的理解

文章目录 list和vector的迭代器对比list的实现过程完整代码 本篇是关于vector和list的模拟实现中&#xff0c;关于迭代器模块的更进一步理解&#xff0c;以及在前文的基础上增加对于反向迭代器的实现和库函数的对比等 本篇是写于前面模拟实现的一段时间后&#xff0c;重新回头…...

HTML 笔记 表格

1 表格基本语法 tr&#xff1a;table row th&#xff1a;table head 2 表格属性 2.1 基本属性 表格的基本属性是指表格的行、列和单元格但并不是每个表格的单元格大小都是统一的&#xff0c;所以需要设计者通过一些属性参数来修改表格的样子&#xff0c;让它们可以更更多样…...

3.1 C/C++ 使用字符与指针

C/C语言是一种通用的编程语言&#xff0c;具有高效、灵活和可移植等特点。C语言主要用于系统编程&#xff0c;如操作系统、编译器、数据库等&#xff1b;C语言是C语言的扩展&#xff0c;增加了面向对象编程的特性&#xff0c;适用于大型软件系统、图形用户界面、嵌入式系统等。…...

[代码学习]einsum详解

einsum详解 该函数用于对一组输入 Tensor 进行 Einstein 求和&#xff0c;该函数目前仅适用于paddle的动态图。 Einstein 求和是一种采用 Einstein 标记法描述的 Tensor 求和&#xff0c;输入单个或多个 Tensor&#xff0c;输出单个 Tensor。 paddle.einsum(equation, *opera…...

女性必看——“黄体破裂”到底有多可怕?

前几天的亚运会上发生了这样一件事&#xff1a; 雅思敏&#xff08;化名&#xff09;是一名国外皮划艇运动员&#xff0c;在亚运会上奋力完成皮划艇比赛后&#xff0c;突然开始 剧烈腹痛、面色苍白&#xff0c;大汗淋漓&#xff0c;经过进一步检查&#xff0c;确诊卵巢黄体破裂…...

colab切换目录的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

基于SSM的生活缴费系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

【WebLogic】WebLogic 2023年7月补丁导致JVM崩溃的解决方案

受影响版本&#xff1a; Oracle WebLogic 12c&#xff08;12.2.1.4.0&#xff09;Oracle WebLogic 14c&#xff08;14.1.1.0.0&#xff09; 问题描述&#xff1a; Oracle官方在2023年7月发布的最新版本的OPatch&#xff08;13.9.4.2.13&#xff09;存在一个新出现的Bug&#…...

简单OpenSL ES学习

初识OpenSL ES OpenSL ESObjects和Interfaces 所有的Object在OpenSl里面我们拿到的都是一个SLObjectItf&#xff1a;SLObjectItf_创建引擎创建过程要设计得这么麻烦&#xff1f;&#xff08;object的生命周期&#xff09;这么多参数&#xff0c;参数类型这么多学习障碍太大&…...

Linux网络编程- struct packet_mreq setsockopt()

struct packet_mreq struct packet_mreq 是一个数据结构&#xff0c;用于 Linux 中的原始数据包套接字&#xff0c;当我们想改变套接字的行为以接收特定类型的数据包时&#xff0c;它与 setsockopt() 函数配合使用。 下面是 struct packet_mreq 的定义&#xff1a; struct p…...

C++学习day4

作业&#xff1a; 1> 思维导图 2> 整理代码 1. 拷贝赋值函数课上代码 //拷贝赋值函数课上代码 #include<iostream> using namespace std;//创建类 class Stu { private://私有的string name;int socer;int *age;//此处注意用到指针类型 public://共有的//无参构…...

从零学算法54

54.给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到…...

Logback日志框架使用详解以及如何Springboot快速集成

Logback简介 日志系统是用于记录程序的运行过程中产生的运行信息、异常信息等&#xff0c;一般有8个级别&#xff0c;从低到高为All < Trace < Debug < Info < Warn < Error < Fatal < OFF off 最高等级&#xff0c;用于关闭所有日志记录fatal 指出每个…...

Nginx概念

Nginx概念 Nginx 是一款面向性能设计的 HTTP 服务器&#xff0c;相较于 Apache、lighttpd 具有占有内存少&#xff0c;稳定性高等优势&#xff0c;同时也是一个非常高效的反向代理、负载平衡服务器 nginx使用的是反应器模式&#xff0c;主事件循环等待操作系统发出准备事件的信…...

vim基础指令(自用)

这个是自己随便写的&#xff0c;类似于笔记 vim 多模式编辑器 查看指令&#xff1a; gg&#xff1a; 定位光标到最开始行 shift(按)g 定位到最结尾行 nshift(按)g 定位到任意行 shift&#xff04; 定位到本行结尾 0 定位到本行开头 w&#xff1a;跨单词移动 h.j.k,l: 左下上右 …...

【centos7安装ElasticSearch】

概述 最近工作中有用到ES &#xff0c;当然少不了自己装一个服务器捣鼓。本文的ElasticSearch 的版本&#xff1a; 7.17.3 一、下载 ElasticSearch 点此下载 下载完成后上传至 Linux 服务器&#xff0c;本文演示放在&#xff1a; /root/ 下&#xff0c;进行解压&#xff1…...

ElementPlus Switch 开关基础使用

昨天开发用到开关组件 后台返回字段是 can_write 默认是0 or 1 但是Switch 组件绑定的默认值默认是 true or false 直接绑定会导致默认是关闭状态 在页面一加载 值发生变化时 会自己调用 查了文档 需要使用 active-value 和 inactive-value 来指定绑定的数据类型 …...

无机布防火卷帘门报价透明,包工包料,一次说清所有费用

很多客户在选购无机布防火卷帘门时&#xff0c;最关心实际成交价格&#xff0c;也担心报价不清晰&#xff0c;后期产生各类额外支出。行业内产品定价参差不齐&#xff0c;选材做工不同&#xff0c;最终价位自然存在差距&#xff0c;挑选时不能只看表面低价。 &#x1f449; 点击…...

Python基础语法:访问器@property和修改器@xxx.setter

一、简介 访问器和修改器也是装饰器的一种。 property: 访问器&#xff0c;getter xxx.setter: 修改器&#xff0c;setter 访问器和修改器的根本目的是想将属性私有化&#xff0c;提供getter&setter去访问。 访问器和修改器能够做到访问属性其实在调用getter方法&#xff0…...

保姆级教程:在CentOS 7上用达梦8搭建DCA练习环境(附ulimit、VNC、ODBC全配置)

达梦8 DCA认证实战&#xff1a;CentOS 7环境搭建与调优全指南 在国产数据库技术快速发展的今天&#xff0c;达梦数据库作为核心产品之一&#xff0c;其DCA认证已成为众多从业者提升竞争力的重要选择。与理论为主的认证不同&#xff0c;DCA更注重实际操作能力&#xff0c;而一个…...

如何用SMUDebugTool彻底掌控你的AMD Ryzen处理器性能调优

如何用SMUDebugTool彻底掌控你的AMD Ryzen处理器性能调优 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.co…...

ARM PMU性能监控单元原理与实践指南

1. ARM PMU性能监控单元概述性能监控单元&#xff08;PMU&#xff09;是现代ARM处理器中用于硬件级性能分析的核心组件。它通过一组可编程的硬件计数器&#xff0c;实现对处理器内部各种关键事件的精确测量。这些事件涵盖了从指令执行、缓存访问到内存子系统行为等处理器活动的…...

全链路压测实战:双十一级别的流量,我是这样扛住的

作为一名在质量保障领域摸爬滚打多年的测试工程师&#xff0c;我深知传统的单接口压测在如今分布式架构下的无力感。当业务流量达到双十一这种脉冲式、高并发的级别时&#xff0c;任何一个非核心链路上的“短板”都可能引发系统性的雪崩。全链路压测不再是选择题&#xff0c;而…...

别急着扔!12年老ThinkPad X230升级SSD和内存后,Win10流畅得像新电脑

12年老ThinkPad X230重生指南&#xff1a;极简升级打造流畅办公利器每次打开抽屉看到那台积灰的ThinkPad X230&#xff0c;总有种说不出的情感。这款2012年问世的经典商务本&#xff0c;曾陪伴无数人度过加班到凌晨的夜晚。如今性能确实有些力不从心&#xff0c;但直接丢弃又觉…...

3分钟解锁网易云音乐NCM文件:ncmdumpGUI小白也能懂的完整教程

3分钟解锁网易云音乐NCM文件&#xff1a;ncmdumpGUI小白也能懂的完整教程 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经下载了网易云音乐的歌曲&a…...

ZTE光猫工厂模式解锁:5分钟开启隐藏功能的终极指南

ZTE光猫工厂模式解锁&#xff1a;5分钟开启隐藏功能的终极指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 核心关键词&#xff1a;ZTE光猫工厂模式解锁 长尾关键词&#xff1a; ZT…...

【审计专栏】【财务领域】 第四十九篇 人在企业中的核心资产和核心利益01

编号 类型 企业 (行业/企业产品/企业利益链/生态位与层级) 业务领域 企业性质 企业中人的角色/岗位/利益矩阵 人在企业中的核心资产/附属资产 资产的业务-财务数学模型及数字/数值 关联知识 1 核心经营性资产(如IP、数据、品牌) 行业:人工智能 产品:工业视觉检…...