通俗易懂:插入排序算法全解析(C++)

插入排序算法是一种简单直观的排序算法,它的原理就像我们玩扑克牌时整理手中的牌一样。下面我将用通俗易懂的方式来解释插入排序算法的工作原理。 

假设我们手上有一副无序的扑克牌,我们的目标是将它们从小到大排列起来。插入排序算法的思想是,我们从第二张牌开始,逐个将后面的牌插入到已排序的部分中。这样,我们每次插入一张牌,已排序的部分就多了一张牌,直到所有的牌都被插入到正确的位置。 

飞书20231205-150051

现在,让我们通过一个简单的例子来演示插入排序算法的过程。假设我们有以下一组数字需要排序:[5, 2, 4, 6, 1, 3]。 

  1. 我们从第二个数字开始,也就是数字2。我们将2与前面已排序的部分进行比较,如果它小于前面的数字,就将它插入到该数字的前面。在这个例子中,2比5小,所以我们将2插入到5的前面,得到[2, 5, 4, 6, 1, 3]。 
  2. 接下来,我们将数字4与前面的数字进行比较。4比5小,所以我们将4插入到5的前面,得到[2, 4, 5, 6, 1, 3]。 
  3. 然后,我们将数字6与前面的数字进行比较。6比5大,所以它应该放在5的后面。此时,已排序部分为[2, 4, 5],所以我们得到[2, 4, 5, 6, 1, 3]。 
  4. 我们继续这个过程,将数字1插入到已排序部分中。1比2小,所以我们将1插入到2的前面,得到[1, 2, 4, 5, 6, 3]。然后,我们将数字3插入到已排序部分中。3比2大,但比4小,所以我们将3插入到4的前面,得到[1, 2, 3, 4, 5, 6]。 
  5. 最后,所有的数字都被插入到正确的位置,得到一个有序的数组:[1, 2, 3, 4, 5, 6]。 通过这个例子,我们可以看到插入排序算法的基本思想。它通过逐个将未排序的元素插入到已排序的部分中,逐步构建有序的序列。这个过程类似于整理扑克牌,每次插入一张牌,整个序列就会变得更加有序。

演示动画如下:

飞书20231205-145043

插入排序算法(C/C++)示例代码如下:

#include <stdio.h>

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

int main() {
    int arr[] = {5, 2, 4, 6, 1, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("原始数组: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    insertionSort(arr, n);

    printf("排序后的数组: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

//代码输出
//原始数组: 5 2 4 6 1 3
//排序后的数组: 1 2 3 4 5 6zo

总结

通过这个例子,我们可以看到插入排序算法的基本思想。它通过逐个将未排序的元素插入到已排序的部分中,逐步构建有序的序列。这个过程类似于整理扑克牌,每次插入一张牌,整个序列就会变得更加有序。虽然插入排序算法在处理小规模数据时表现良好,但对于大规模数据来说,它的效率相对较低。在实际应用中,我们可能会选择更高效的排序算法,如快速排序或归并排序。但是,了解插入排序算法的原理对于理解排序算法的工作方式和思想是非常有帮助的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web实习三_JavaScript编程

编写 JavaScript 程序实现 输出“九九乘法表”&#xff08; 左下三角形形式 &#xff09;。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

qiankun中子系统变化透传到主系统调用主系统方法

1、首先在主系统中qiankun启动前把变动的参数初始化 2、初始化之后就可以通过全局状态通信把参数透传为全局 3、在微应用子系统main.js的qiankun的mount中获取到全局设备参数属性并是设置为子系统全局 4、在微应用子系统中需要去调主系统方法时就在那个地方改变透传过来的参数 …

如何性能测试中进行业务验证?

在性能测试过程中&#xff0c;验证HTTP code和响应业务code码是比较基础的&#xff0c;但是在一些业务中&#xff0c;这些参数并不能保证接口正常响应了&#xff0c;很可能返回了错误信息&#xff0c;所以这个时候对接口进行业务验证就尤其重要。下面分享一个对某个资源进行业务…

ros2+在Ubuntu上安装gazebo

Binary Installation on Ubuntu(Ubuntu上binary方式安装gazebo) Harmonic binaries are provided for Ubuntu Jammy (22.04) and Ubuntu 24.04 (when its released). &#xff08;在Ubuntu22.04或者24.04上都是安装Harmonic版本的gazebo&#xff09;The Harmonic binaries are…

issue unit

The Issue Unit issue queue用来hold住&#xff0c;已经dispatched&#xff0c;但是还没有执行的uops&#xff1b; 当一条uop的所有的operands已经ready之后&#xff0c;request请求会被拉起来&#xff1b;然后issue select logic将会从request bit 1的slot中&#xff0c;选择…

指令寻址(顺序寻址和跳跃寻址)

目录 一. 顺序寻址1.1 定长指令字结构1.2 变长指令字结构 二. 跳跃寻址 \quad 指令寻址:如何确定下一条指令的存放地址? \quad 一. 顺序寻址 \quad 1.1 定长指令字结构 \quad 主存按字编址 \quad 按字节编址 1.2 变长指令字结构 \quad 同种颜色代表一条指令 由于无法判断当前…

制衣厂生产ERP系统怎么样?制衣厂生产ERP软件哪个好

有很多的制衣厂在订单处理、物料、仓储、销售、仓储、物料编码、车间成本核算、计件工资核算等方面还存在不少改进空间。 而经过多年的发展&#xff0c;现如今制衣行业的竞争比较激烈&#xff0c;如何提升各业务部门协同效率&#xff0c;减少车间物料损耗&#xff0c;简化生产…

idea的快捷键

1.调整字体的大小 文件夹的循序:setting-Editor-Font 界面: 2.删除当前行 文件夹的循序:setting-Keymap-DeleteLine 界面: 3.导入该行需要的类 文件夹的循序:setting-Editor-General-Auto import 界面: 4.格式化代码 文件夹的循序:setting-keymap-Reformat 界面: 5.快速…

【MySQL】——数据类型及字符集

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

loki 如何格式化日志

部署 grafana-loki 首先介绍一下如何部署 官方文档&#xff1a;部署 grafana-loki 部署命令 设置集群的存储类&#xff0c;如果有默认可以不设置设置命名空间 helm install loki oci://registry-1.docker.io/bitnamicharts/grafana-loki --set global.storageClasslocal -n …

程序员退一步的海阔天空,是考公还是烤冷面?

打败一个志向坚定的程序员只需要一个简单的年龄危机、身体预警.......钱难挣、屎难吃。996的钱更是伤身体&#xff0c;或者是被裁员、劝退的无力。算了~这份工作也不是非要不可&#xff0c;劳资不干了&#xff01;&#xff08;hahahahaha....bushi)人生在世&#xff0c;进可攻、…

Soul 推出“SoulX”AI人工智能模型,已应用于旗下 App“苟蛋”AI聊天机器人

Soul社交平台最近发布了名为”SoulX“的AI人工智能模型&#xff0c;SoulX将作为Soul “AIGC社交”布局的重要基建&#xff0c;具备prompt驱动、条件可控生成、上下文理解、多模态理解等能力&#xff0c;垂直应用于平台上多元社交互动场景&#xff0c;如智能对话机器人、AI辅助聊…

模拟微信、QQ、支付宝那样的随机红包

随机拆分给定金额为给定个数红包&#xff0c;像微信、QQ、支付宝随机红包那种&#xff0c;要求红包总金额绝对与给定金额相等。 (笔记模板由python脚本于2023年12月14日 12:37:58创建&#xff0c;本篇笔记适合熟悉Python随机数模块random的整型随机方法randint&#xff0c;能熟…

卫浴企业做网站的效果如何

卫浴产品无论工程还是家庭中都有较高需求度&#xff0c;相关品牌或经销商也不少&#xff0c;然而在实际经营中&#xff0c;卫浴品牌商家也面临着一些痛点&#xff1a; 1、品牌宣传拓客难 卫浴产品并不缺客户&#xff0c;但大小品牌众多&#xff0c;商家想要突围绝非易事&…

国产数据库适配-人大金仓(kingbase V8R3)

金仓数据库是基于POSTGRE_SQL 参考资料 国产数据库人大金仓踩坑记录和函数适配_金仓数据库关系不存在-CSDN博客 Springboot工程 适配人大金仓 kingbase V8R3 引入驱动包和方言包 hibernate-5.2.17.Finaldialect.jar kingbase8-8.2.0.jar application.yml文件 driver-cla…

计算机网络安全原理习题参考答案

1.9习题 一、单项选择题 1. ISO 7498-2从体系结构的角度描述了5种可选的安全服务&#xff0c;以下不属于这5种安全服务的是&#xff08;  D  &#xff09; A. 数据完整性   B. 身份鉴别   C. 授权控制   D. 数据报过滤 2. ISO 7498-2描述了8种特定的安全机制&…

破局创新,天翼云HBlock如何以小见大、以柔克刚?

引言&#xff1a;另辟蹊径开拓创新 不走传统存储厂商的“寻常路” 【全球存储观察 &#xff5c; 科技热点关注】 在分布式块存储领域&#xff0c;大部分厂商的安装软件套件大小都在GB级。然而&#xff0c;天翼云破天荒地将存储资源盘活系统HBlock的软件安装包浓缩到了170MB&a…

SFP3006-ASEMI大电流快恢复二极管SFP3006

编辑&#xff1a;ll SFP3006-ASEMI大电流快恢复二极管SFP3006 型号&#xff1a;SFP3006 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247 最大平均正向电流&#xff1a;30A 最大重复峰值反向电压&#xff1a;600V 产品引线数量&#xff1a;3 产品内部芯片个数&#xff1…

【前端学习记录】记一次分片上传逻辑的调试过程

前言 在项目开发的过程中&#xff0c;经常会遇到上传和下载&#xff0c;对于上传来说&#xff0c;如果是小文件的话&#xff0c;接口响应会比较快&#xff0c;但是对于大文件&#xff0c;则需要对其分片以减少请求体的大小和上传时间。 小文件上传 以Vue框架使用<el-uplo…

微信小程序map视野发生改变时切换定位点

<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…