插入排序详解!!!(简单排序),基本功排序C语言版

目录

1.什么是插入排序

2.插入排序的源代码

3.源代码详解


1.什么是插入排序

  这是一个插入排序的流程图,插入排序 很像我们玩斗地主,玩牌,斗地主在开始前,我们是不是要给我们手上的牌排序啊,假设我们理牌有一个规矩就是只能一张一张拿起来。并且我们给牌换位置也只能一张一张换。不能中间跳过一张直接换(因为机器和人脑不同)

那我们拿起第一张的时候,和上图一样我们拿到一个3,那现在就只有一个3,你也不用排序

但我们拿到第二张的时候,这时有两张牌,拿到的是5,它确实比3大,那5就在3的后面就好

我们拿到第三张2的时候,这时候2是不是比5小,那2 和 5就交换,现在手牌就是 3 2 5,然后因为现在 2 的 前一张牌还是大于2,我们就再交换一下,手牌就变成了2 3 5.

这样就完成了一次插入排序。

后面的插入排序也是在这个基础上循环即可

2.插入排序的源代码

#include<stdio.h>
void Swap(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}
void My_Insertsort(int* arr,int sz)
{for (int i = 1; i < sz; i++){if (arr[i] < arr[i - 1]){for (int j = i - 1; j >= 0; j--){if (arr[j] > arr[j + 1]){Swap(&arr[j], &arr[j+1]);}else{break;}}}}
}int main()
{int arr[] = { 2,4,1,6,7,2,10,22,44,0 };int sz = sizeof(arr) / sizeof(arr[0]);My_Insertsort(arr, sz);return 0;
}

3.源代码详解

#include<stdio.h>
void Swap(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}
void My_Insertsort(int* arr,int sz)
{for (int i = 1; i < sz; i++){if (arr[i] < arr[i - 1]){for (int j = i - 1; j >= 0; j--){if (arr[j] > arr[j + 1]){Swap(&arr[j], &arr[j+1]);}else{break;}}}}
}

 源代码主要解释的是这一块。

1.第一个for循环是为了遍历除了arr【0】之后的数组arr。

2.if 判断语句 现在 i 位置 小于 前一个位置的数据,这是进入下一个循环的前提。因为从头开始我们每一次 都已经把前面的数字排成有序的。才进行下一个数字的排序。就像 你现在手牌上是 3 5 如果抽到的不是2 是 7(下图),那这张7自然而然就是 最后。不用再往前比了。

3. 第二个for循环 ,就是现在i 这个位置的数字,一个一个往后比,直到遇到比这个数字还小的就停止循环。就比如你现在 手牌 还是 3 5 ,你接下来拿到一张4 ,你4这个位置先和5换了,然后在前面一张发现是3,小于4,那你就没必要换了,最后就变成了 3 4 5.

 

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

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

相关文章

17周刷题(6~10)

编写int fun(char s[])函数&#xff0c;将八进制参数串s转换为十进制整数返回&#xff0c;若传入"77777"返回32767。 #include<string.h> int fun(char s[]) {int i strlen(s)-1, h 0, q 1;while (i>0) {h (s[i] - 0) * q;q * 8;i--;}return h; } …

Pytest自动化的坑

1、封装pytest的类型&#xff0c;名称的开头需要使用Test开头命名类&#xff0c;否则会出现运行pytest找不到类的情况 2、函数被pytest.fixtrue装饰之后&#xff0c;就不能再直接引用函数方法&#xff0c;需要把函数名称当作参数传到其他的函数中使用 3、conftest的全局变量名称…

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统 随着油气工业的发展&#xff0c;管道泄漏成为一个严峻的安全问题。本文介绍了一种基于LabVIEW的分布式光纤油气管道泄漏检测及预警系统的设计思路和组成结构。系统包括硬件和软件两部分&#xff0c;其中硬件部分详细阐述了分…

网络安全最正确的自学顺序!(小白福音)

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

Open3D将聚类结果显示或者保存

将聚类结果按大小排序&#xff0c;并取出最大的4个结果 import time import open3d as o3d; import numpy as np; import matplotlib.pyplot as plt#坐标 mesh_coord_frame o3d.geometry.TriangleMesh.create_coordinate_frame(size355, origin[0, 0, 0]) #mesh_coord_frame…

电极箔,预计到2025年市场规模将达到35亿美元

电极箔是一种关键性材料&#xff0c;广泛应用于太阳能电池、电动汽车电池、储能电池、5G基站电池等领域。随着新能源产业的迅猛发展&#xff0c;电极箔市场也在逐步壮大。下面将从全球市场和中国市场进行分析其发展趋势。全球市场分析&#xff1a; 在全球范围内&#xff0c;随着…

大创项目推荐 深度学习卷积神经网络的花卉识别

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

nodejs发送消息给钉钉机器人

1.钉钉添加机器人 1.1 新建一个群 --> 群设置 --> 机器人 1.2 机器人管理 --> 添加机器人 1.3 机器人--> 自定义-->添加 1.4 配置信息 备注1&#xff1a;密钥复制出来SEC2c689174c4a8ed49c8a7309a490cd98e0e7f7bc788bb7232d53c738eb5f5d008 备注2&#xff1a;…

python的初识(print+intput函数和变量的基本运用)

#主页传送&#xff1a;江南的江 #每日鸡汤&#xff1a;你要知是非以不辩为解脱&#xff0c;烦恼以忍辱为智慧&#xff0c;办事以尽力为有功&#xff0c;处人以真诚为品格。做人的方略是&#xff1a;把好自己的口&#xff0c;明了心中的事&#xff0c;干好手里的活&#xff0c;走…

使用vite构建Vue3项目

1、安装vite npm init vitelatest npm构建vite项目 yarn create vite yarn构建vite项目2、依次需要配置项目名 、框架选择、原生和ts版本的选择 r enter 重新开始服务 o enter 快速打开浏览器3、项目启动效果

嵌入式Linux之MX6ULL裸机开发学习笔记(IMX启动方式-启动设备的选择)

一,硬件启动方式选择 1.启动方式的选择 6ull支持多种启动方式。 比如可以从 SD/EMMC、 NAND Flash、 QSPI Flash等启动。 6ull是怎么支持多种外置flash启动程序的。 1.启动方式选择&#xff1a; BOOT_MODE0 and BOOT_MODE1&#xff0c;这两个是两个IO来控制的&#xff0c;…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-01x10

如上表所示&#xff0c;MOE0&#xff0c;OSSI1&#xff0c;CCxE1&#xff0c;CCxNE0时&#xff0c;如下框图OISx与CCxP异或&#xff0c;OISxN与CC1NP异或&#xff0c;然后相与后决定 OCx与OCxN的输出是否相对于OISx与OISxN取反。&#xff08;异或门参考逻辑门符号-CSDN博客&a…