常见的排序算法及分类对比
虽然在竞赛和编程语言中用到的排序算法主要是时间复杂度为 O ( n log n ) O(n \log n) O(nlogn) 的高效算法,但作为算法学习,我们要从简单到复杂,认识常见的排序算法,并理解其算法思想。本文列出几乎所有的排序算法并进行分类对比。
排序算法总表
以下是一个对比表格,涵盖几乎所有常用的排序算法:
| 名称 | 算法思想 | 平均时间 复杂度 | 最优时间 复杂度 | 最坏时间 复杂度 | 空间 复杂度 | 稳定排序 | 内排序 | 原地排序 | 比较排序 | 备注 |
|---|---|---|---|---|---|---|---|---|---|---|
| 冒泡排序 | 相邻交换,逐步冒泡 | O ( n 2 ) O(n^2) O(n2) | O ( n ) O(n) O(n) | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | 稳 | 内 | 原 | 是 | 可优化(如鸡尾酒排序),不适合大数据。 |
| 选择排序 | 每次选择最小/最大元素 | O ( n 2 ) O(n^2) O(n2) | O ( n 2 ) O(n^2) O(n2) | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | 不 | 内 | 原 | 是 | 简单实现,适合小规模数据。 |
| 插入排序 | 构建局部有序序列 ( 像抓牌) | O ( n 2 ) O(n^2) O(n2) | O ( n ) O(n) O(n) | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | 稳 | 内 | 原 | 是 | 基于简单插入的排序,针对字符串可以折半插入。 |
| 希尔排序 Shell Sort | 改进插入,分组和逐步缩小间隔 | O ( n 1.5 ) O(n^{1.5)} O(n1.5) | O ( n log n ) O(n \log n) O(nlogn) | O |
相关文章:
常见的排序算法及分类对比
虽然在竞赛和编程语言中用到的排序算法主要是时间复杂度为 O ( n log n ) O(n \log n) O(nlogn) 的高效算法,但作为算法学习,我们要从简单到复杂,认识常见的排序算法,并理解其算法思想。本文列出几乎所有的排序算法并进行分类对比。 排序算法总表 以下是一个对比表格…...
多窗口切换——selenium
获取窗口句柄(以Python Selenium为例) current_window_handle方法 用于获取当前窗口的句柄。句柄是一个标识符,用于唯一标识一个窗口。示例代码: from selenium import webdriverdriver webdriver.Chrome() driver.get("…...
LFD STM32编程规范20241111
1. 源文件和头文件放同一目录bsp文件夹顺序文件注释防重复设置#include#defineenum类型声明、定义 包括struct union typedef全局变量声明文件级变量声明全局或文件级函数声明函数实现。按函数声明顺序文件尾注释。/**************END FILE**************/引用头文件不用绝对路…...
Python学习------第八天
函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用: 函数的局部变量和全局变量 局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。 money 5000000 n…...
【扩散——BFS】
题目 代码 #include <bits/stdc.h> using namespace std; const int t 2020, off 2020; #define x first #define y second typedef pair<int, int> PII; int dx[] {0, 0, 1, -1}, dy[] {-1, 1, 0, 0}; int dist[6080][6080]; // 0映射到2020,2020…...
C++ 编程基础(5)类与对象 | 5.5、多态
文章目录 一、多态1、概念2、多态实现方式3、动态绑定与静态绑定4、虚函数4.1、声明与定义4.2、虚函数的工作原理4.3、虚函数的优点与注意事项 5、不能声明为虚函数的函数6、纯虚函数7、抽象类8、总结 前言: 在C编程语言中,多态性(Polymorphi…...
客户端发送http请求进行流量控制
客户端发送http请求进行流量控制 实现方式 1:使用 Semaphore (信号量) 控制流量 asyncio.Semaphore 是一种简单的流控方法,可以用来限制并发请求数量。 import asyncio import aiohttp import timeclass HttpClientWithSemaphore:def __init__(self, …...
STM32 低功耗模式详解
目录 一、什么是低功耗 二、低功耗的核心思想 三、STM32的3种低功耗模式 1、睡眠模式 (Sleep Mode) 2、停止模式 (Stop Mode) 3、 待机模式 (Standby Mode) 四、相关电源管理寄存器 1、PWR_CR (Power Control Register, 电源控制寄存器) 2、PWR_CSR (Power Control/St…...
我的第一个PyQt5程序
PyQt5的开发环境配置完成之后,开始编写第一个PyQt5的程序。 方法一:使用将.ui转换成.py文件的方法 import sys from FirstPyQt import Ui_MainWindow from PyQt5.QtWidgets import *#QtCore,QtGui,QtWidgets # from QtTest import Ui_MainWindow#导入Q…...
Unity调用Python
代码如下: if (useAI){/** 通过PaddlePaddle进行合成处理* */// 创建线程参数对象ThreadParameters parameters new ThreadParameters(){pythonPath "python", // 如果 Python 在系统路径中,可以直接使用 "python"pythonScript U…...
前端,location.reload刷新页面
location.reload() 是 JavaScript 中的一个方法,它用于重新加载当前页面。当你调用这个方法时,浏览器会重新加载当前页面的资源,就像用户点击了浏览器的刷新按钮一样。 基本用法 // 刷新当前页面 location.reload();带参数的用法 location…...
5G的发展演进
5G发展的驱动力 什么是5G [远程会议,2020年7月10日] 在来自世界各地的政府主管部门、电信制造及运营企业、研究机构约200多名会议代表和专家们的共同见证下,ITU-R WP 5D#35e远程会议宣布3GPP 5G技术(含NB-IoT)满足IMT-2020 5G技…...
数据库参数备份
MySQL #!/bin/bash # 获取当前日期和时间的时间戳 TIMESTAMP$(date "%Y%m%d-%H%M%S")# 0、创建目录 mkdir /tmp/parameter_$TIMESTAMP/# 1、获取所有命名空间 echo "1、获取所有命名空间" NAMESPACES$(kubectl get ns | grep qfusion- | grep -v qfusion-…...
PG数据库 数据库时间字段 开始时间和结束时间,判断和查询条件的开始和截止时间存在交集,SQL如何编写
PG 数据库时间字段 开始时间和结束时间,判断和查询条件的开始和截止时间存在交集,SQL如何编写? 在 PostgreSQL 中,如果你想要查询那些时间段(由 开始时间 和 结束时间 定义)与给定的时间段有交集的记录&am…...
k8s服务内容滚动升级以及常用命令介绍
查看K8S集群所有的节点信息 kubectl get nodes 删除K8S集群中某个特定节点 kubectl delete nodes/10.0.0.123 获取K8S集群命名空间 kubectl get namespace 获取K8S所有命名空间的那些部署 kubectl get deployment --all-namespaces 创建命名空间 web界面上看到的效果,但是…...
机器学习: LightGBM模型(优化版)——高效且强大的树形模型
LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升决策树(GBDT)的框架,由微软提出。它具有高效的训练速度、低内存占用、支持并行和GPU加速等特点,非常适合大规模数据的训练任务,尤…...
Wordpress常用配置,包括看板娘跨域等
一个Wordpress的博客已经搭建完成了,那么为了让它看起来更有人间烟火气一点,有一些常用的初始配置,这里整理一下。 修改页脚 页脚这里默认会显示Powered by Wordpress,还有一个原因是这里要加上备案信息。在主题里找到页脚&…...
Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式
此去经年,再难同游 —— 24.11.11 一、什么是设计模式 设计模式是一种编程套路,可以极大的方便程序的开发最常见、最经典的设计模式,就是我们所学习的面向对象了。 除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模…...
Unity 网格模型及优化
一个模型中可以包含很多网格,一个模型可以由多个网格组成。在Unity3D中一个网格可以由多个子网格(Sub-Mesh)组成。 在渲染引擎的时候,每个子网格都要匹配一个材质球来做渲染,实际上一个子网格本身就是一个个普通的模型࿰…...
离线 快速搭建 docker docker-compose k8s 环境
所需资源 sealos_5.0.1_linux_arm64.tar.gzkubernetes.tar等docker-compose-linux-aarch64 离线安装sealos,用于安装k8sdocker 首先安装sealos工具 tar zxvf sealos_5.0.1_linux_arm64.tar.gz sealos && chmod x sealos && mv sealos /usr/bin*…...
从原理到代码:深入解析UniFormer的多头关系聚合器(MHRA)设计
从原理到代码:深入解析UniFormer的多头关系聚合器(MHRA)设计 视频理解领域近年来经历了从3D卷积网络到视觉Transformer的范式转变,但两者在时空特征提取上各有限制。3D CNN擅长捕捉局部时空特征却受限于固定感受野,而视觉Transformer虽能建模…...
云计算算力价格波动:行业重构与竞争新格局
云计算价格反转:从价格战到集体涨价2025年4月,阿里云率先发起价格战,京东云、腾讯云、华为云等纷纷跟进,“最高降幅达60%”的口号让行业陷入价格混战。然而,到了2026年3月,市场风向突变,谷歌云、…...
BabyOS:MCU裸机开发的轻量级框架解析
1. BabyOS:专为MCU裸机开发设计的轻量级框架 在嵌入式开发领域,重复造轮子一直是困扰工程师的痛点。每次新项目启动,我们总需要重新调试那些基础功能模块——从串口通信到Flash操作,从定时器管理到协议栈实现。BabyOS的出现&#…...
深入OpenHarmony NAPI引擎:从‘@ohos.hilog’导入到so库加载的底层链路剖析
深入OpenHarmony NAPI引擎:从‘ohos.hilog’导入到so库加载的底层链路剖析 当开发者在OpenHarmony应用中写下import hilog from ohos.hilog时,背后隐藏着一套精密的系统级协作机制。这条看似简单的语句,实际上触发了从JavaScript语法解析到原…...
从零到一:AI工程开源资源全栈指南与实战应用
从零到一:AI工程开源资源全栈指南与实战应用 【免费下载链接】aie-book [WIP] Resources for AI engineers. Also contains supporting materials for the book AI Engineering (Chip Huyen, 2025) 项目地址: https://gitcode.com/GitHub_Trending/ai/aie-book …...
SDXL 1.0电影级绘图工坊惊艳案例:电影质感风景图动态范围实测
SDXL 1.0电影级绘图工坊惊艳案例:电影质感风景图动态范围实测 1. 项目简介 SDXL 1.0电影级绘图工坊是基于Stable Diffusion XL Base 1.0模型深度优化的AI绘图工具,专门为RTX 4090显卡的24G大显存进行了极致性能调优。与常规部署方式不同,这…...
嵌入式轻量级任务调度框架cola_os解析与实践
1. 嵌入式轻量级任务调度框架cola_os深度解析在嵌入式开发中,我们经常面临一个经典困境:对于功能简单、实时性要求不高的多任务场景,使用完整的RTOS显得过于臃肿,而裸机轮询又难以维护。今天要介绍的cola_os正是为解决这个问题而生…...
眼图分析:高速数字信号完整性的关键工具
1. 眼图基础概念解析 眼图(Eye Diagram)是数字信号完整性分析中最重要的工具之一。作为一名硬件工程师,我每天都会用眼图来评估信号质量。简单来说,眼图就是将数字信号在时间轴上重复叠加后形成的图形,因其形状类似人眼…...
基于高斯过程回归的MATLAB时间序列区间预测代码实现与解析
基于高斯过程回归(GPR)的时间序列区间预测 GPR时间序列区间预测 matlab代码 暂无Matlab版本要求 -- 推荐 2018B 版本及以上做时间序列最烦的就是拍脑袋给个“明天涨3%左右”——“左右”到底是正负0.5还是正负3?如果是风电发电的负荷申报,正负差多了要罚…...
C++程序崩溃别慌!手把手教你用backward-cpp+glog捕获并记录堆栈信息(附完整CMake配置)
C程序崩溃别慌!手把手教你用backward-cppglog捕获并记录堆栈信息(附完整CMake配置) 深夜两点,服务器告警突然响起。你揉着惺忪的睡眼查看日志,只看到一行冰冷的"Segmentation fault"——没有调用栈…...
