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

常见的排序算法:插入排序、选择排序、冒泡排序、快速排序

1、插入排序

步骤:

1.从第一个元素开始,该元素可以认为已经被排序
2.取下一个元素tem,从已排序的元素序列从后往前扫描
3.如果该元素大于tem,则将该元素移到下一位
4.重复步骤3,直到找到已排序元素中小于等于tem的元素
5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置
6.重复步骤2~5

C语言实现:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//插入排序
void insertionSort(int arr[], int n)
{for (int i = 1; i < n; i++){int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key){arr[j + 1] = arr[j];j = j - 1;}arr[j + 1] = key;}
}
int main()
{int arr[] = { 64,56,53,13,12,16,19,55,2,3,6 };int n = sizeof(arr) / sizeof(arr[0]);printf("排序前的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}insertionSort(arr, n);printf("\n");printf("排序后的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}return 0;
};

2、选择排序

步骤:在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。

C语言实现:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//选择排序
void Swap(int* x, int* y)
{int temp = *x;*x = *y;*y = temp;
}
void selectionSort(int arr[], int n)
{for (int i = 0; i < n - 1; i++){int minid = i;for (int j = i+1; j < n; j++){if (arr[j] < arr[minid]) {Swap(&arr[j], &arr[minid]);}}}
}
int main()
{int arr[] = { 64,56,53,13,12,16,19,55,2,3,6 };int n = sizeof(arr) / sizeof(arr[0]);printf("排序前的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}selectionSort(arr, n);printf("\n");printf("排序后的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}return 0;
};

3、冒泡排序

步骤:

升序排序为例:

  • 比较相邻元素,如果前面的比后面的元素大,则两元素交换位置

  • 对每一对相邻元素进行比较,大的放后,这样最后的元素将是最大的元素

  • 对越来越少的混乱元素重复上述步骤(最后的元素已经有序,不需比较),直到没有元素需要交换位置

C语言实现:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//冒泡排序
void Swap(int *x, int *y)
{int temp = *x;*x = *y;*y = temp;
}
void bubbleSort(int arr[], int n)
{for (int i = 0; i <n-1; i++){int flag = 1;for (int j = 0; j < n - 1 - i; j++){if (arr[j] > arr[j + 1]) {flag = 0;Swap(&arr[j], &arr[j + 1]);} }if (flag == 1) {return;}}
}
int main()
{int arr[] = { 64,56,53,13,12,16,19,55,2,3,6 };int n = sizeof(arr) / sizeof(arr[0]);printf("排序前的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}bubbleSort(arr, n);printf("\n");printf("排序后的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}return 0;
};

4、快速排序

步骤:

1、选出一个key,一般是最左边或是最右边的。
2、定义一个begin和一个end,begin从左向右走,end从右向左走。(需要注意的是:若选择最左边的数据作为key,则需要end先走;若选择最右边的数据作为key,则需要bengin先走)。
3、在走的过程中,若end遇到小于key的数,则停下,begin开始走,直到begin遇到一个大于key的数时,将begin和right的内容交换,end再次开始走,如此进行下去,直到begin和end最终相遇,此时将相遇点的内容与key交换即可。(选取最左边的值作为key)
4.此时key的左边都是小于key的数,key的右边都是大于key的数
5.将key的左序列和右序列再次进行这种单趟排序,如此反复操作下去,直到左右序列只有一个数据,或是左右序列不存在时,便停止操作,此时此部分已有序。

C语言实现:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//快速排序
void Swap(int* x, int* y)
{int temp = *x;*x = *y;*y = temp;
}
int partition(int arr[], int low, int high)
{int pivot = arr[high];int i = low;for (int j = low; j < high; j++){if (arr[j] < pivot){Swap(&arr[j], &arr[i++]);}}Swap(&arr[i], &arr[high]);return i;}
void quickSort(int arr[], int low,int high)
{if (low < high){int mid = partition(arr, low, high);quickSort(arr, low, mid - 1);quickSort(arr, mid+1, high);}
}
int main()
{int arr[] = { 64,56,53,13,12,16,19,55,2,3,6 };int n = sizeof(arr) / sizeof(arr[0]);printf("排序前的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}quickSort(arr,0, n-1);printf("\n");printf("排序后的顺序:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}return 0;
}

参考B站视频:

排序算法:快速排序【图解+代码】_哔哩哔哩_bilibili

相关文章:

常见的排序算法:插入排序、选择排序、冒泡排序、快速排序

1、插入排序 步骤&#xff1a; 1.从第一个元素开始&#xff0c;该元素可以认为已经被排序 2.取下一个元素tem&#xff0c;从已排序的元素序列从后往前扫描 3.如果该元素大于tem&#xff0c;则将该元素移到下一位 4.重复步骤3&#xff0c;直到找到已排序元素中小于等于tem的元素…...

C++17 中的 std::gcd:探索最大公约数的现代 C++ 实现

文章目录 一、std::gcd 的基本用法&#xff08;一&#xff09;包含头文件&#xff08;二&#xff09;函数签名&#xff08;三&#xff09;使用示例 二、std::gcd 的实现原理三、std::gcd 的优势&#xff08;一&#xff09;简洁易用&#xff08;二&#xff09;类型安全&#xff…...

力扣刷题(数组篇)

日期类 #pragma once#include <iostream> #include <assert.h> using namespace std;class Date { public:// 构造会频繁调用&#xff0c;所以直接放在类里面&#xff08;类里面的成员函数默认为内联&#xff09;Date(int year 1, int month 1, int day 1)//构…...

OpenWRT中常说的LuCI是什么——LuCI介绍(一)

我相信每个玩openwrt的小伙伴都或多或少看到过luci这个东西&#xff0c;但luci到底是什么东西&#xff0c;可能还不够清楚&#xff0c;今天就趁机来介绍下&#xff0c;openwrt中的luci&#xff0c;到底是个什么东西。 什么是LuCI&#xff1f; 首先&#xff0c;LuCI是OpenWRT中…...

机器学习核心算法解析

机器学习核心算法解析 机器学习是人工智能的核心技术之一&#xff0c;它通过从数据中学习模式并做出预测或决策。本文将深入解析机器学习的核心算法&#xff0c;包括监督学习、无监督学习和强化学习&#xff0c;并通过具体案例和代码示例帮助读者理解这些算法的实际应用。 1. …...

【目标检测json2txt】label从COCO格式json文件转YOLO格式txt文件

目录 🍀🍀1.COCO格式json文件 🌷🌷2.YOLO格式txt文件 💖💖3.xml2json代码(python) 🐸🐸4.输入输出展示 🙋🙋4.1输入json 🍂🍂4.2输出txt 整理不易,欢迎一键三连!!! 送你们一条美丽的--分割线-- 🍀🍀1.COCO格式json文件 COCO数…...

LVDS接口总结--(5)IDELAY3仿真

仿真参考资料如下&#xff1a; https://zhuanlan.zhihu.com/p/386057087 timescale 1 ns/1 ps module tb_idelay3_ctrl();parameter REF_CLK 2.5 ; // 400MHzparameter DIN_CLK 3.3 ; // 300MHzreg ref_clk ;reg …...

Flink内存配置和优化

在 Apache Flink 1.18 的 Standalone 集群中&#xff0c;内存设置是一个关键配置&#xff0c;它直接影响集群的性能和稳定性。 Flink 的内存配置主要包括 JobManager 和 TaskManager 的内存分配。 以下是如何在 Standalone 模式下配置内存的详细说明。 JobManager 内存配置 Jo…...

网络安全之笔记--Linus命令

Linux命令 文件和目录操作 ls 列出目录内容 常用选项 -a&#xff1a;显示所有文件和目录&#xff08;包括隐藏文件&#xff0c;以.开头的文件&#xff09;。 -l&#xff1a;以长格式显示文件和目录的详细信息。 -h&#xff1a;与-l配合使用&#xff0c;以更易读的方式显示文件大…...

deepseek和chatgpt对比

DeepSeek 和 ChatGPT 都是自然语言处理领域的工具&#xff0c;但它们的设计目标和功能有所不同。 功能定位&#xff1a; ChatGPT 是一个基于 OpenAI GPT-3 或 GPT-4 的聊天机器人&#xff0c;旨在进行人机对话、文本生成、问题解答等&#xff0c;广泛应用于教育、客服、创意写作…...

微服务与网关

什么是网关 背景 单体项目中,前端只用访问指定的一个端口8080,就可以得到任何想要的数据 微服务项目中,ip是不断变化的,端口是多个的 解决方案:网关 网关:就是网络的关口,负责请求的路由、转发、身份校验。 前段还是访问之前的端口8080即可 后端对于前端来说是透明的 网…...

Unity中实现动态图集算法

在 Unity 中&#xff0c;动态图集&#xff08;Dynamic Atlas&#xff09;是一种在运行时将多个纹理合并成一个大纹理图集的技术&#xff0c;这样可以减少渲染时的纹理切换次数&#xff0c;提高渲染效率。 实现原理&#xff1a; 动态图集的核心思想是在运行时动态地将多个小纹理…...

本地部署DeepSeek Nodejs版

目录 1.下载 Ollama 2.下载DeepSeek模型 3.下载 ollama.js 1.下载 Ollama https://ollama.com/ 下载之后点击安装&#xff0c;等待安装成功后&#xff0c;打开cmd窗口&#xff0c;输入以下指令&#xff1a; ollama -v 如果显示了版本号&#xff0c;则代表已经下载成功了。…...

字节跳动后端二面

&#x1f4cd;1. 数据库的事务性质&#xff0c;InnoDB是如何实现的&#xff1f; 数据库事务具有ACID特性&#xff0c;即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性&#xff1a; &#x1f680; 实现细节&#xff1a; 原子性&#xff1a;通过undo log实…...

TUSB422 MCU 软件用户指南

文章目录 TUSB422 MCU 软件用户指南 目录表格图表1. 介绍2. 配置2.1 通用配置2.2 USB-PD 3.0 支持2.3 VDM 支持 3. 代码 ROM/RAM 大小优化4. 通过 UART 调试4. 移植到其他微控制器 TUSB422 MCU 软件用户指南 摘要 本文档是 TUSB422 微控制器基于 Type-C 端口控制&#xff08;…...

Django在终端创建项目(pycharm Windows)

1.选择目录 选择或新建一个文件夹&#xff0c;作为项目保存的地方 2.右键在终端打开 3.确定django-admin.exe安装位置 找到自己安装django时&#xff0c;django-admin.exe安装的位置&#xff0c;例如 4.运行命令 使用django-admin.exe的绝对路径&#xff0c;在刚才打开的终端…...

wordpress主题制作

工具/原料 <P><BR>使用divcss语言编写的html静态页面一个</P> <P>Macromedia Dreamweaver软件<BR></P> WordPress主题结构分析 1 1、index.php首页模板&#xff08;最基本&#xff09; ---- 1、header.php头部 ---- 2、sidebar.php侧边…...

echarts 3d中国地图飞行线

一、3D中国地图 1. 一定要使用 echarts 5.0及以上的版本; 2. echarts 5.0没有内置中国地图了。点击下载 china.json&#xff1b; 3. 一共使用了四层地图。 &#xff08;1&#xff09;第一层是中国地图各省细边框和展示南海诸岛&#xff1b; &#xff08;2&#xff09;第二层是…...

视频基础操作

1.1. 例子 读取mp4格式的视频&#xff0c;将每一帧改为灰度图&#xff0c;并且打上水印&#xff08;“WaterMark”&#xff09;,并将其输出保存为out.mp4&#xff0c;在这个例子中可以看到视频读取&#xff0c;每帧数据处理&#xff0c;视频保存的整体流程简单示例 import cv…...

微信小程序 - 组件和样式

组件和样式介绍 在开 Web 网站的时候&#xff1a; 页面的结构由 HTML 进行编写&#xff0c;例如&#xff1a;经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写&#xff0c;例如&#xff1a;经常会采用 .class 、#id 、element 等选择器 但在小程序中不能…...

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令&#xff0c;如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符&#xff08;CMD&#xff0…...

【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(二)

接着上一篇文章&#xff1b;我们继续来研究es的复杂检索 文章目录 (1) bool用来做复合查询&#xff08;2&#xff09;Filter【结果过滤】&#xff08;3&#xff09;term&#xff08;4&#xff09;Aggregation&#xff08;执行聚合&#xff09; (1) bool用来做复合查询 复合语…...

游戏引擎学习第96天

讨论了优化和速度问题&#xff0c;以便简化调试过程 节目以一个有趣的类比开始&#xff0c;提到就像某些高端餐厅那样&#xff0c;菜单上充满了听起来陌生或不太清楚的描述&#xff0c;需要依靠服务员进一步解释。虽然这听起来有些奇怪&#xff0c;但实际上&#xff0c;它反映…...

(Xshell 8 + Xftp 8)下载安装miniconda至服务器指定目录+配置虚拟环境

一一一一 Xshell 8 Xftp 8均已登录&#xff0c;miniconda.sh安装包已经放在服务器指定目录中 二二二二 赋予脚本执行权限 chmod x Miniconda3-latest-Linux-x86_64.sh安装miniconda ./Miniconda3-latest-Linux-x86_64.sh -p /data1/huyan/zhangyifeng/miniconda3一直Enter…...

多机器人系统的大语言模型:综述

25年2月来自 Drexel 大学的论文“Large Language Models for Multi-Robot Systems: A Survey”。 大语言模型 (LLM) 的快速发展为多机器人系统 (MRS) 开辟新的可能性&#xff0c;从而增强通信、任务规划和人机交互。与传统的单机器人和多智体系统不同&#xff0c;MRS 带来独特…...

通用的将jar制作成docker镜像sh脚本

通用的将jar制作成docker镜像sh脚本 为了在将 JAR 制作成 Docker 镜像的过程中创建日志目录&#xff0c;可以对之前的脚本进行扩展。以下是改进后的脚本&#xff0c;会在镜像构建时在容器内创建日志目录&#xff0c;并将日志文件挂载到该目录下。 在生成的 Dockerfile 中添加…...

Python----PyQt开发(PyQt基础,环境搭建,Pycharm中PyQttools工具配置,第一个PyQt程序)

一、QT与PyQT的概念和特点 1.1、QT QT是一个1991年由The Qt Company开发的跨平台C图形用户界面应用程序开发 框架&#xff0c;可构建高性能的桌面、移动及Web应用程序。也可用于开发非GUI程序&#xff0c;比如 控制台工具和服务器。Qt是面向对象的框架&#xff0c;使用特殊的代…...

DeepSeek+3D视觉机器人应用场景、前景和简单设计思路

DeepSeek3D视觉机器人在多个领域具有广泛的应用场景和巨大的前景。以下是详细的分析&#xff1a; 应用场景 制造业 自动化装配&#xff1a;机器人可以精确地抓取和装配零件&#xff0c;提高生产效率和产品质量。 质量检测&#xff1a;通过3D视觉技术检测产品缺陷&#xff0c;确…...

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32 1. 获取代码&#xff1a;2. 加入你的项目2.1 以 STM32 为例:2.2 以 ESP-IDF 为例: 3. 对接 API3.1 以 STM32 为例&#xff1a; 4. 更多函数说明5. 写入 EEPROM 示例 MT6835 Framework 纯C语言实现&#xff0c;跨平台&…...

python视频爬虫

文章目录 爬虫的基本步骤一些工具模拟浏览器并监听文件视频爬取易错点一个代码示例参考 爬虫的基本步骤 1.抓包分析&#xff0c;利用浏览器的开发者工具 2.发送请求 3.获取数据 4.解析数据 5.保存数据 一些工具 requests, 用于发送请求&#xff0c;可以通过get&#xff0c;p…...