十大排序算法(C语言)
参考文献
https://zhuanlan.zhihu.com/p/449501682
https://blog.csdn.net/mwj327720862/article/details/80498455?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169837129516800222848165%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169837129516800222848165&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-80498455-null-null.142v96pc_search_result_base5&utm_term=%E5%8D%81%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95c%E8%AF%AD%E8%A8%80&spm=1018.2226.3001.4187
算法概述
-
算法分类
- 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
- 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
-
算法复杂度
-
相关概念
- 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
- 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
- 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
- 空间复杂度:是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。
冒泡排序算法(Bubble Sort)
- 算法原理
重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来,直到没有剩余需要交换的元素。 - 动画演示
- 代码实现
void bubbleSort(int *arr, int size) {/*只需要确定size - 1个最大数,最后一个自然就出来了*/for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}} }
选择排序(Selection Sort)
-
算法原理
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 -
动画演示
-
代码实现
void selectionSort(int *arr, int size) {/*同样地,确定好了size-1个最小值,最后一个就是最大值*/for (int i = 0; i < size - 1; i++) {int minIndex = i;for (int j = i + 1; j < size; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;} }
插入排序(Insertion Sort)
-
算法原理
构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 -
动画演示
-
代码实现
void insertionSort(int *arr, int size) {/*选择插入的元素应当从第二个元素开始*/for (int i = 1; i < size; i++) {for (int j = i; j > 0; j--) {/*每次将该元素与前一个元素进行比较,符合条件就移动,否则直接结束循环*/if (arr[j] < arr[j - 1]) {int temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;} else {break;}}} }
相关文章:

十大排序算法(C语言)
参考文献 https://zhuanlan.zhihu.com/p/449501682 https://blog.csdn.net/mwj327720862/article/details/80498455?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169837129516800222848165%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&…...

iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING
#论文题目:ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING #论文地址:https://arxiv.org/abs/2310.06625 #论文源码开源地址:https://github.com/thuml/Time-Series-Library #论文所属会议:Mach…...
QT C++ AES字符串加密实现
使用方法:在.h中引入类库。然后在cpp中直接引入使用即可 类库的下载地址https://download.csdn.net/download/u012372365/88478671 具体代码: #include <QCoreApplication> #include <QTest> #ifdef __cplusplus #include "unit_tes…...
关于mysql json字段创建索引
前言: 创建索引的方式分为两种,CREATE index 和 ALTER TABLE; 被创建索引的关键字类型又分两种,数字(UNSIGNED)和字符串(char(128)) 一、给json对象属性param_value(假…...

“探索Linux世界:从CentOS安装到常见命令使用“
目录 引言一、安装CentOS二、Linux的常见命令文件夹和目录操作命令文件编辑命令vi或vim编辑器命令模式编辑模式末行模式 总结 引言 在计算机领域,Linux作为一种强大而灵活的操作系统,在服务器、嵌入式设备和个人电脑等领域广泛应用。本文将引导您了解并…...

SVN出现Cleanup failed to process the following paths...
SVN报错,需要执行SVN的清理命令clean up,但clean up时出现错误Cleanup failed to process the following paths... 解决办法: 1、clean up的窗口,勾选Break locks和Fix time stamps(简单方便);…...

gitee上传项目
目录 首先在gitee新建一个仓库 接下来创建好项目,先找到生成公钥SSH的目录 接下来是生成公钥SSH 仓库创建好后,接着开始链接项目 首先在gitee新建一个仓库 接下来创建好项目,先找到生成公钥SSH的目录 接下来是找目录:C盘&a…...
实现文件上传和下载
文件上传的前端页面: multiple表示支持一次上传多个文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head> <body> <form action"/ge…...

大数据-Storm流式框架(七)---Storm事务
storm 事务 需求 storm 对于保证消息处理,提供了最少一次的处理保证。最常见的问题是如果元组可以被 重发,可以用于计数吗?不会重复计数吗? strom0.7.0 引入了事务性拓扑的概念,可以保证消息仅被严格的处理一次。因此可…...

Kafka - 3.x Kafka消费者不完全指北
文章目录 Kafka消费模式Kakfa消费者工作流程消费者总体工作流程消费者组原理消费者组初始化流程消费者组详细消费流程 独立消费者案例(订阅主题)消费者重要参数 Kafka消费模式 Kafka的consumer采用pull(拉)模式从broker中读取数据…...

Gerrit | 重磅! 2.x 版本升级到 3.x 版本----转
Gerrit | 重磅! 2.x 版本升级到 3.x 版本 为什么要做版本升级? 2.x known bugs 重大问题不一一列举,这里仅仅是举几个例子: 安全或权限问题:普通用户能看到敏感数据,例如看到其他用户的 hashed api 密码,…...
使用c++编程语言,用递归的方法求第n个斐波那契数,代码如下
#include<iostream> using namespace std;int fib_1(int n) {if (n < 1){return n;}return fib_1(n - 1) fib_1(n - 2); }int main() {cout << fib_1(6);return 0; }...
git config pull.rebase false
git pull 默认使用merge 可以使用 git pull --rebase 命令使用rebase 或者配置 git config pull.rebase true 使 git pull命令执行 git pull --rebase git config pull.rebase false 的作用是设置 Git 在执行 git pull 命令时默认使用 merge 而不是 rebase。 git pull 命…...

Spring面试题:(一)IoC,DI,AOP和BeanFactory,ApplicationContext
IoC,DI,AOP思想 IOC就是控制反转,是指创建对象的控制权的转移。以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系。对象与对…...

RabbitMQ如何保证消息不丢失呢?
RabbitMQ 是一个流行的消息队列系统,用于在分布式应用程序之间传递消息。要确保消息不会丢失,可以采取以下一些措施: 持久化消息: RabbitMQ 允许你将消息标记为持久化的。这意味着消息将被写入磁盘,即使 RabbitMQ 服务…...

VR步进式漫游,轻松构建三维模型,带来展示新形式!
引言: 虚拟现实(Virtual Reality,简称VR)已经成为当今科技领域的一项创新力量,它正在逐渐渗透到不同的领域,其中步进式漫游是VR技术的一项重要应用,它能在各个行业的宣传中发挥重要作用。 一&a…...

英语——分享篇——常用人物身份
常用人物身份 家庭成员类 father 父亲 mother 母亲 grandmother(外)祖母 grandfather(外)祖父 son 儿子 daughter 女儿 uncle 叔叔,舅舅 aunt 婶母,舅母 brother 兄弟 sister 姐妹 nephew 侄子 niece…...
202310-宏基组学物种分析工具-MetaPhlAn4安装和使用方法-Anaconda3- centos9 stream
MetaPhlAn 4是一种基于DNA序列的微生物组分析工具,它能够从宏基因组测序数据中识别和分离微生物的组成。以下是安装和使用MetaPhlAn 4的步骤: 安装MetaPhlAn 4: 裸机环境,手动安装 1. 安装依赖项: MetaPhlAn 4需要…...

systrace/perfetto如何看surfaceflinger的vsync信号方法-android framework实战车载手机系统开发
背景: hi,粉丝朋友们: 大家好!近期分享了surfaceflinger相关的一些blog,有同学就对相关的一些内容产生了一些疑问。 比如:vsync查看问题,即怎么才可以说是vsync到来了。 比如perfetto中surfac…...

一文带你彻底弄懂js事件循环(Event Loop)
JavaScript事件循环是JavaScript运行时环境中处理异步操作的机制。它允许JavaScript在执行同步代码的同时处理异步任务,以避免阻塞线程并提供更好的用户体验。 本文将在浏览器异步执行原理基础上带你彻底弄懂js的事件循环机制。 浏览器JS异步执行原理 js是单线程…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...