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之间,其他的类似。。。。
| 原始序列 | 5 | 7 | 1 | 3 | 6 | 2 | 4 |
|---|---|---|---|---|---|---|---|
| 插入零次 | 5 | 7 | 1 | 3 | 6 | 2 | 4 |
| 插入一次 | 5 | 7 | 1 | 3 | 6 | 2 | 4 |
| 插入二次 | 1 | 5 | 7 | 3 | 6 | 2 | 4 |
| 插入三次 | 1 | 3 | 5 | 7 | 6 | 2 | 4 |
| 插入四次 | 1 | 3 | 5 | 6 | 7 | 2 | 4 |
| 插入五次 | 1 | 2 | 3 | 5 | 6 | 7 | 4 |
| 插入六次 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
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大交换顺序。以此类推
| 原始序列 | 5 | 7 | 1 | 3 | 6 | 2 | 4 |
|---|---|---|---|---|---|---|---|
| 冒泡一次 | 5 | 1 | 3 | 6 | 2 | 4 | 7 |
| 冒泡二次 | 1 | 3 | 5 | 2 | 4 | 6 | 7 |
| 冒泡三次 | 1 | 3 | 2 | 4 | 5 | 6 | 7 |
| 冒泡四次 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
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的位置就定下来了,再分别对两边递归调用同样的方法。
| 原始序列 | 5 | 7 | 1 | 3 | 6 | 2 | 4 |
|---|---|---|---|---|---|---|---|
| 交换一次 | 5 | 4 | 1 | 3 | 6 | 2 | 7 |
| 交换二次 | 5 | 4 | 1 | 3 | 2 | 6 | 7 |
| 划分 | 2 | 4 | 1 | 3 | 5 | 6 | 7 |
| 递归运行 | 2 | 4 | 1 | 3 | 5 | 6 | 7 |
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]
首先先把序列一份为二 (标注和没标注的),然后对每个子列里面也分别进行二分归并排序,然后把已经排好的子数合并(两个序列的首元素比较哪个小就把哪个拿走,知道一个数组空了就把另一个数组全部接在后面)。
| 原始序列 | 5 | 7 | 1 | 3 | 6 | 2 | 4 |
|---|---|---|---|---|---|---|---|
| 归分 | 5 | 4 | 1 | 3 | 6 | 2 | 7 |
| 递归排序 | 1 | 3 | 4 | 5 | 2 | 6 | 7 |
| 开始组合 | 1 | 3 | 4 | 5 | 2 | 6 | 7 |
| 原 | 3 | 4 | 5 | 2 | 6 | 7 | |
| 新数组 | 1 | ||||||
| 原 | 3 | 4 | 5 | 6 | 7 | ||
| 新数组 | 1 | 2 | |||||
| 原 | 4 | 5 | 6 | 7 | |||
| 新数组 | 1 | 2 | 3 | ||||
| 原 | 5 | 6 | 7 | ||||
| 新数组 | 1 | 2 | 3 | 4 | |||
| 原 | 6 | 7 | |||||
| 新数组 | 1 | 2 | 3 | 4 | 5 | ||
| 原 | |||||||
| 新数组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
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种排序算法
文章目录 一,排序算法时间复杂度比较二,插入排序三,冒泡排序四,快速排序五,堆排序六,二分归并排序 一,排序算法时间复杂度比较 算法最坏情况下平均情况下插入排序O(n )O(n)冒泡排序O(n)O(n)快速…...
TCP/IP(七)TCP的连接管理(四)
一 全连接队列 nginx listen 参数backlog的意义 nginx配置文件中listen后面的backlog配置 ① TCP全连接队列概念 全连接队列: 也称 accept 队列 ② 查看应用程序的 TCP 全连接队列大小 实验1: ss 命令查看 LISTEN状态下 Recv-Q/Send-Q 含义附加:…...
LeetCode【84】柱状图中的最大矩形
题目: 思路: https://blog.csdn.net/qq_28468707/article/details/103682528 https://www.jianshu.com/p/2b9a36a548fa 清晰 代码: public int largestRectangleArea(int[] heights) {int[] heightadd new int[heights.length 1];for (i…...
C++:关于模拟实现vector和list中迭代器模块的理解
文章目录 list和vector的迭代器对比list的实现过程完整代码 本篇是关于vector和list的模拟实现中,关于迭代器模块的更进一步理解,以及在前文的基础上增加对于反向迭代器的实现和库函数的对比等 本篇是写于前面模拟实现的一段时间后,重新回头…...
HTML 笔记 表格
1 表格基本语法 tr:table row th:table head 2 表格属性 2.1 基本属性 表格的基本属性是指表格的行、列和单元格但并不是每个表格的单元格大小都是统一的,所以需要设计者通过一些属性参数来修改表格的样子,让它们可以更更多样…...
3.1 C/C++ 使用字符与指针
C/C语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。…...
[代码学习]einsum详解
einsum详解 该函数用于对一组输入 Tensor 进行 Einstein 求和,该函数目前仅适用于paddle的动态图。 Einstein 求和是一种采用 Einstein 标记法描述的 Tensor 求和,输入单个或多个 Tensor,输出单个 Tensor。 paddle.einsum(equation, *opera…...
女性必看——“黄体破裂”到底有多可怕?
前几天的亚运会上发生了这样一件事: 雅思敏(化名)是一名国外皮划艇运动员,在亚运会上奋力完成皮划艇比赛后,突然开始 剧烈腹痛、面色苍白,大汗淋漓,经过进一步检查,确诊卵巢黄体破裂…...
colab切换目录的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
基于SSM的生活缴费系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
【WebLogic】WebLogic 2023年7月补丁导致JVM崩溃的解决方案
受影响版本: Oracle WebLogic 12c(12.2.1.4.0)Oracle WebLogic 14c(14.1.1.0.0) 问题描述: Oracle官方在2023年7月发布的最新版本的OPatch(13.9.4.2.13)存在一个新出现的Bug&#…...
简单OpenSL ES学习
初识OpenSL ES OpenSL ESObjects和Interfaces 所有的Object在OpenSl里面我们拿到的都是一个SLObjectItf:SLObjectItf_创建引擎创建过程要设计得这么麻烦?(object的生命周期)这么多参数,参数类型这么多学习障碍太大&…...
Linux网络编程- struct packet_mreq setsockopt()
struct packet_mreq struct packet_mreq 是一个数据结构,用于 Linux 中的原始数据包套接字,当我们想改变套接字的行为以接收特定类型的数据包时,它与 setsockopt() 函数配合使用。 下面是 struct packet_mreq 的定义: struct p…...
C++学习day4
作业: 1> 思维导图 2> 整理代码 1. 拷贝赋值函数课上代码 //拷贝赋值函数课上代码 #include<iostream> using namespace std;//创建类 class Stu { private://私有的string name;int socer;int *age;//此处注意用到指针类型 public://共有的//无参构…...
从零学算法54
54.给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到…...
Logback日志框架使用详解以及如何Springboot快速集成
Logback简介 日志系统是用于记录程序的运行过程中产生的运行信息、异常信息等,一般有8个级别,从低到高为All < Trace < Debug < Info < Warn < Error < Fatal < OFF off 最高等级,用于关闭所有日志记录fatal 指出每个…...
Nginx概念
Nginx概念 Nginx 是一款面向性能设计的 HTTP 服务器,相较于 Apache、lighttpd 具有占有内存少,稳定性高等优势,同时也是一个非常高效的反向代理、负载平衡服务器 nginx使用的是反应器模式,主事件循环等待操作系统发出准备事件的信…...
vim基础指令(自用)
这个是自己随便写的,类似于笔记 vim 多模式编辑器 查看指令: gg: 定位光标到最开始行 shift(按)g 定位到最结尾行 nshift(按)g 定位到任意行 shift$ 定位到本行结尾 0 定位到本行开头 w:跨单词移动 h.j.k,l: 左下上右 …...
【centos7安装ElasticSearch】
概述 最近工作中有用到ES ,当然少不了自己装一个服务器捣鼓。本文的ElasticSearch 的版本: 7.17.3 一、下载 ElasticSearch 点此下载 下载完成后上传至 Linux 服务器,本文演示放在: /root/ 下,进行解压࿱…...
ElementPlus Switch 开关基础使用
昨天开发用到开关组件 后台返回字段是 can_write 默认是0 or 1 但是Switch 组件绑定的默认值默认是 true or false 直接绑定会导致默认是关闭状态 在页面一加载 值发生变化时 会自己调用 查了文档 需要使用 active-value 和 inactive-value 来指定绑定的数据类型 …...
利用AI改写工具,五个策略帮助论文查重率快速降至合规标准
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&a…...
百川2-13B中文优势:OpenClaw在本地化办公场景中的特殊优化技巧
百川2-13B中文优势:OpenClaw在本地化办公场景中的特殊优化技巧 1. 为什么选择百川2-13B处理中文办公文档 去年我在整理团队季度报告时,曾尝试用多个开源模型处理中文PDF和微信群聊记录。当通用英文模型遇到中文标点符号和行业术语时,要么漏…...
Comsol光子晶体:谷霍尔效应、单胞与超胞能带计算及谷单向传输
Comsol光子晶体谷霍尔效应。 单胞,超胞能带计算。 谷单向传输等。光子晶体玩拓扑这件事最近越来越上头。今天咱们撸起袖子直接干一个谷霍尔效应仿真,手把手教你在COMSOL里搞出单向传输这种神奇现象。先说重点:结构旋转6度就能打开带隙&#x…...
3个维度突破股票数据获取难题:MOOTDX量化分析实战指南
3个维度突破股票数据获取难题:MOOTDX量化分析实战指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 作为量化投资和金融数据分析的核心基础设施,稳定、高效、低成本的股票…...
2026 年 IT 技术趋势深度复盘:别再追热点,真正落地的只有这 6 条
前言:上一篇我们聊了 2026 年 IT 行业全景趋势,很多粉丝留言:趋势太多看不过来,不知道该学什么、该放弃什么。这一篇更务实、更落地、更贴近一线开发与架构师视角 ——剔除泡沫,只讲真正会在 2026 年大规模落地的技术方…...
2026年各高校论文AI率新规汇总:双一流和普通院校标准差异
2026年各高校论文AI率新规汇总:双一流和普通院校标准差异 同一篇论文,知网52%,维普38%,万方21%。 为什么差这么多?不是平台乱搞,而是检测算法和判断标准不一样。理解了高校AI率新规背后的逻辑,…...
M5Stack舵机驱动库:PCA9685硬件PWM控制与多平台移植
1. 项目概述M5Hat-8Servos 是专为 M5Stack 生态设计的硬件驱动库,用于控制 M5Stack 官方推出的HAT-8SERVO扩展模块。该模块基于PCA9685 16通道12位PWM LED与伺服驱动芯片,通过 IC 总线与主控(如 M5Stack Core2、M5Stamp C3、M5Paper 等&#…...
GEO2R数据下载太慢?试试这个国内镜像加速方案(附完整基因注释流程)
GEO数据下载加速与基因注释全流程实战指南 引言:为什么我们需要国内镜像方案 如果你曾经尝试从GEO数据库下载大型数据集,大概率经历过那种令人抓狂的等待——进度条像蜗牛爬行,下载速度以KB/s计算,甚至中途频繁断开。这不是你的网…...
手把手教你用LVGL 8.x实现一个会变色的电池电量控件(附完整代码)
从零构建LVGL 8.x动态电池控件:变色逻辑与分辨率适配实战 在智能手表、医疗设备等嵌入式场景中,电池电量的可视化展示从来都不只是简单的数字堆砌。想象一下,当用户瞥见设备屏幕时,一个会随着电量降低逐渐由绿转红的电池图标&…...
dry插件系统解析:如何扩展自定义Docker管理功能
dry插件系统解析:如何扩展自定义Docker管理功能 【免费下载链接】dry moncho/dry: dry(Docker Run Commands)是一款命令行工具,旨在简化对Docker容器的操作管理,提供了一种简洁的方式创建、启动、停止和删除Docker容器…...
