c++中的冒泡排序(Bubble Sort),插入排序(Insertion Sort)和选择排序(Selection Sort)

前言

hello大家好啊,这里是文宇,不是文字,是文宇哦。今天开始爆更

冒泡排序(Bubble Sort)

冒泡排序(Bubble Sort)是一种简单的排序算法,它属于比较排序算法的一种。冒泡排序的基本思想是对待排序序列从前向后进行多次的遍历,每次遍历将相邻的两个元素进行比较,如果顺序不对则进行交换,直到整个序列有序为止。

下面详细解释冒泡排序的过程:

  1. 首先,需要一个待排序的序列。假设序列长度为n,下标从0到n-1。
  2. 从序列的第一个元素开始,依次比较相邻的两个元素。如果相邻的两个元素顺序不正确,则交换它们的位置,使得较大的元素移到后面。
  3. 重复以上步骤,直到比较到序列的倒数第二个元素为止。
  4. 经过第一轮的遍历后,最大的元素已经被交换到了序列的最后一个位置。
  5. 重复进行步骤2和步骤3,直到整个序列有序为止。

冒泡排序的过程可以看作是每次都将当前未排序区间的最大元素交换到了未排序区间的最后一个位置,所以称为冒泡排序。

冒泡排序的时间复杂度为O(n^2),其中n是待排序序列的长度。冒泡排序是一种稳定的排序算法,它的空间复杂度为O(1),只需要常数个额外的空间。

下面是C++代码实现冒泡排序的例子:

#include <iostream>
using namespace std;void bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {// 交换arr[j]和arr[j+1]int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n);cout << "排序后的数组:";for (int i = 0; i < n; i++) {cout << arr[i] << " ";}return 0;
}

以上代码中,bubbleSort函数实现了冒泡排序的算法。main函数中创建了一个待排序的数组,并调用bubbleSort函数对数组进行排序。最后,使用循环输出排序后的数组。

这就是C++中冒泡排序的详解。冒泡排序虽然简单,但由于其时间复杂度较高,对于大规模数据的排序效率较低,一般用于小规模数据或作为其他排序算法的辅助算法。

插入排序(Insertion Sort)

插入排序(Insertion Sort)是一种简单直观的排序算法,它属于比较排序算法的一种。插入排序的基本思想是将待排序序列分为已排序区间和未排序区间,每次从未排序区间取出一个元素,插入到已排序区间的合适位置,使得已排序区间仍然有序。

下面详细解释插入排序的过程:

  1. 首先,需要一个待排序的序列。假设序列长度为n,下标从0到n-1。
  2. 将第一个元素看作已排序区间,并且将第二个元素到最后一个元素看作未排序区间。
  3. 从未排序区间依次取出一个元素,插入到已排序区间的合适位置。
  4. 插入的方法是将该元素与已排序区间的元素从后向前进行比较,如果该元素小于已排序区间的某个元素,则将该元素向后移动一位,腾出插入位置,直到找到合适的插入位置。
  5. 重复以上步骤,直到未排序区间的所有元素都被插入到已排序区间为止。

插入排序的时间复杂度为O(n^2),其中n是待排序序列的长度。插入排序是一种稳定的排序算法,它的空间复杂度为O(1),只需要常数个额外的空间。

下面是C++代码实现插入排序的例子:

#include <iostream>
using namespace std;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--;}arr[j+1] = key;}
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);insertionSort(arr, n);cout << "排序后的数组:";for (int i = 0; i < n; i++) {cout << arr[i] << " ";}return 0;
}

以上代码中,insertionSort函数实现了插入排序的算法。main函数中创建了一个待排序的数组,并调用insertionSort函数对数组进行排序。最后,使用循环输出排序后的数组。

这就是C++中插入排序。插入排序相对于冒泡排序和选择排序来说,效率较高,适用于小规模数据或部分有序的数据。然而,在处理大规模数据时,插入排序的效率还是较低的。

选择排序(Selection Sort)

选择排序(Selection Sort)是一种简单直观的排序算法,它属于比较排序算法的一种。选择排序的基本思想是通过不断选择剩余未排序部分的最小(或最大)值,并将其放置到已排序部分的末尾,以此达到排序的目的。

下面详细解释选择排序的过程:

  1. 首先,需要一个待排序的序列。假设序列长度为n,下标从0到n-1。
  2. 将序列分为已排序区间和未排序区间,一开始已排序区间为空,未排序区间包括所有元素。
  3. 在未排序区间中循环查找最小(或最大)值的下标,记为minIndex。
  4. 将minIndex处的元素与未排序区间的第一个元素交换位置,将最小(或最大)值放到已排序区间的末尾。
  5. 重复以上步骤,直到未排序区间的所有元素都被放到已排序区间为止。

选择排序的时间复杂度为O(n^2),其中n是待排序序列的长度。选择排序是一种不稳定的排序算法,因为在交换位置过程中可能会改变相同元素的相对顺序。选择排序的空间复杂度为O(1),只需要常数个额外的空间。

下面是C++代码实现选择排序的例子:

#include <iostream>
using namespace std;void selectionSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {int minIndex = i;for (int j = i+1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}if (minIndex != i) {swap(arr[i], arr[minIndex]);}}
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);selectionSort(arr, n);cout << "排序后的数组:";for (int i = 0; i < n; i++) {cout << arr[i] << " ";}return 0;
}

以上代码中,selectionSort函数实现了选择排序的算法。main函数中创建了一个待排序的数组,并调用selectionSort函数对数组进行排序。最后,使用循环输出排序后的数组。

这就是C++中选择排序的详解。选择排序相对于冒泡排序和插入排序来说,效率较低,适用于小规模数据或对稳定性无要求的情况。然而,在处理大规模数据时,选择排序的效率还是较低的。

结语

今天一口气写了这么多文章,我去休息了,但是明天也是爆更哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java开发利器:深入浅出`java.util.Objects`

在Java开发过程中&#xff0c;java.util.Objects作为一个不可或缺的工具类&#xff0c;为开发者提供了诸多实用方法&#xff0c;用以简化对象操作、提升代码健壮性和可读性。本文将详尽介绍Objects类中的几个核心方法及其应用场景&#xff0c;帮助你更好地驾驭Java编程。 前言…

C++顶层const和底层const

《Cprimer》中写到&#xff1a;顶层const表示指针本身是个常量&#xff0c;底层const表示指针所指的对象是一个常量。 顶层const可以表示任意的对象是常量&#xff0c;这一点对任何数据类型都适用。底层const则与指针和引用等复合类型的基本类型部分有关&#xff0c;比较特殊的…

【嵌入式DIY实例-ESP8266篇】-LCD ST7789显示BMP280传感器数据

LCD ST7789显示BMP280传感器数据 文章目录 LCD ST7789显示BMP280传感器数据1、硬件准备与接线2、代码实现在本文中,将介绍如何通过 ESP8266 NodeMCU 开发板 (ESP-12E) 与 ST7789 TFT 显示屏连接。 在此项目中,我们将了解如何将 ESP8266 NodeMCU 板与 Bosch Sensortec 的 BMP2…

OpenAI发布迷你AI模型GPT-4o mini

本心、输入输出、结果 文章目录 OpenAI发布迷你AI模型GPT-4o mini前言OpenAI发布迷你AI模型GPT-4o mini英伟达联合发布 Mistral-NeMo AI 模型:120 亿参数、上下文窗口 12.8 万个 tokenOpenAI发布迷你AI模型GPT-4o mini 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csd…

多视角多对学习方式的相关论文解读

目标解决问题&#xff1a; 1&#xff1b;地理分布的空气质量和天气站是异质的空间对象&#xff0c;它们监测的条件不同。现有的方法通常设计用于同质的空间对象&#xff0c;不适合联合预测。 2&#xff1b;观察误差累积&#xff1a;监测站的观测数据往往因传感器误差和环境干扰…

如何在 Nginx 中配置访问日志的格式?

文章目录 如何在 Nginx 中配置访问日志的格式&#xff1f;一、Nginx 访问日志的重要性二、Nginx 访问日志的默认格式三、自定义 Nginx 访问日志格式四、配置访问日志的存储路径五、实际应用场景与示例场景一&#xff1a;电商网站场景二&#xff1a;多语言网站场景三&#xff1a…

Win10+Docker配置TensorRT环境

1.Docker下载和安装 Docker下载:Install Docker Desktop on Windows Docker安装: 勾选直接下一步就行,安装完成后需要电脑重启。 重启后,选择Accept—>Continue without signing in—>skip survey. 可以进入下面页面,并且左下角是绿色的,显示e…

用Python写一个视频采集脚本,对某网站进行批量采集

最近某牙上又出现一批高质量视频&#xff0c;听说删的很快&#xff0c;还好我会Python&#xff0c;赶紧采集下来保存&#xff01; 准备工作 环境使用 Python 3.10 解释器 Pycharm 编辑器 模块使用 requests >>> 数据请求模块 re <正则表达式模块> os <文…

unittest框架和pytest框架区别及示例

unittest框架和pytest框架区别及示例 类型unittest框架pytest框架unittest框架示例pytest框架示例安装python内置的一个单元测试框架,标准库&#xff0c;不需要安装第三方单元测试库&#xff0c;需要安装使用时直接引用 import unittest安装命令&#xff1a;pip3 install pyte…

matlab 声音信号希尔伯特黄变换

1、内容简介 略 91-可以交流、咨询、答疑 2、内容说明 略 Hilbert-Huang变换&#xff08;HHT&#xff09;是一种基于经验的数据分析方法 方法。它的扩展基础是自适应的&#xff0c;因此它可以从非线性和非平稳过程中产生具有物理意义的数据表示。这个 适应性的优势是有代价…

加入更多的功能,我需要随便输入一个 我今天的工作 ,它能自动分类到 其中一个,例如 “编程” 它会自动分类到 工作

为了实现更智能的分类&#xff0c;我们需要改进分类器&#xff0c;使其能够处理用户输入的任意文本&#xff0c;并自动分类到相应的类别。可以通过增加训练数据并改进数据预处理和分类器训练来实现这一点。 改进步骤 增加训练数据&#xff1a;增加更多样化的训练数据&#xf…

算法——双指针(day4)

15.三数之和 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 这道题目说是三数之和&#xff0c;其实这和我们之前做过的两数之和是一个规律的~无非就是我们需要实时改动target的值。先排好序&#xff0c;然后固定一个数取其负值作target&#xf…

【MySQL进阶之路 | 高级篇】GROUP BY优化,分页查询优化

1. GROUP BY优化 group by使用的索引的原则几乎跟order by一致&#xff0c;即使没有过滤条件用到索引&#xff0c;也可以直接使用索引。 group by先排序再分组&#xff0c;遵循索引建立的最佳左前缀原则 当无法使用索引列&#xff0c;增大max_length_for_sort_data和sort_buf…

【Linux 驱动】IMX6ULL eLCDIF驱动

1. eLCDIF设备树 lcdif: lcdif021c8000 {compatible "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; //属性reg <0x021c8000 0x4000>; //起始地址 地址大小interrupts <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; …

Linux存储管理-逻辑卷管理(LVM)

逻辑卷管理&#xff08;LVM&#xff09;流程 物理磁盘/分区 -> 物理卷&#xff08;PV&#xff09;-> 加入卷组&#xff08;VG&#xff09;-> 卷组调配空间&#xff0c;制作逻辑卷&#xff08;LV&#xff09;-> 格式化 -> 挂载 -> 使用 为什么需要逻辑卷管理…

Web 性能入门指南-3.5 优化单页应用程序 (SPA)

&#x1f338; 欢迎来到前端后花园&#xff01;这里是一个温馨的小角落&#xff0c;专为热爱前端技术的你打造。没有华丽的辞藻&#xff0c;只有真诚的分享。希望你能在这里找到实用的内容&#xff0c;学到新知识&#xff0c;同时也欢迎你畅所欲言&#xff0c;分享你的思考和见…

【Linux 13】文件系统

文章目录 &#x1f308; 一、前言&#x1f308; 二、文件操作的系统接口⭐ 1. 打开文件 open⭐ 2. 关闭文件 close⭐ 3. 写入文件 write⭐ 4. 读取文件 read &#x1f308; 三、文件描述符⭐ 1. 文件描述符介绍⭐ 2. 提前被分配的文件描述符 0 1 2⭐ 3. 文件描述符的分配规则 &…

浏览器插件利器--allWebPluginV2.0.0.16-beta版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

minio安装小计一则

安装minio并且使用api方式对文件进行操作 本文使用docker安装 docker pull minio/minio docker pull minio/mc &#xff08;mc为minio文件运行命令行工具&#xff09; 使用如下命令运行Minio服务器容器&#xff1a; docker run -p 9000:9000 -p 9001:9001 --name minio-…

【深度学习】大模型GLM-4-9B Chat ,微调与部署

下载好东西&#xff1a; 启动容器环境: docker run -it --gpus all --net host --shm-size8g -v /ssd/xiedong/glm-4-9b-xd:/ssd/xiedong/glm-4-9b-xd kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-yolov8train bashpip install typer tiktoken numpy1.2…