插入排序详解(C语言)

前言
插入排序是一种简单直观的排序算法,在小规模数据排序或部分有序的情况下插入排序的表现十分良好,今天我将带大家学习插入排序的使用。let’s go ! ! !
在这里插入图片描述

插入排序

插入排序的基本思想是将待排序的序列分为已排序和未排序两部分。初始时,将第一个元素视为已排序序列,剩下的元素视为未排序部分。然后逐个将未排序部分的元素插入到已排序序列的正确位置,直到所有元素都被插入到已排序序列中。
举个例子:
这是一个数组,我们要对其从小到大排序。
1 6 8 9 5 2 3
根据刚才的思路,我们将1认为是已排序部分,其他的为待排序部分,我们要逐个的将待排序部分的元素插入到已排序部分,首先我们把6插在1的后面,因为,6 > 1,现在6就算是以排序部分,之后的8和9也依次加到后面,现在的已排序部分为1689,我们需要把5插入其中,首先5和9对比,5 < 9,再让5和8对比,5 < 8,再让5和6对比,5 < 6,再让5和1对比,5 > 1,所以5需要插在1和6之间,剩下的2和3也是同理,插入完即可得到目标序列。
下面我们来用代码实现:

#include<stdio.h>
int main()
{int arr[6] = { 1,1,4,5,1,4 };//创建数组for (int i = 1; i < 6; i++){int end = i;//记录当前位置while (end){if (arr[end - 1] > arr[end])//交换位置{int tem = arr[end];arr[end] = arr[end - 1];arr[end-1] = tem;end--;}else//已经插入退出循环{break;}}}return 0;
}

优化
我们会发现在已排序部分是单调的,那么我们是不是就可以使用二分法呢?使用二分法可以大大加快我们插入的效率。当我们通过二分法找到需要插入的位置后,我们要让这个位置到记录的位置这个区间的元素整体后移一格,然后插入这个数字,例如:
1 6 8 9 5
我们通过二分查找找到5要放在1和6中间,那么我们要让6-9后移一格1 6 8 9然后将5插入空处。
代码如下:

#include<stdio.h>
int efcz(int* arr, int right)//二分查找函数
{int end = right + 1;//目标数下标int left = 0;while (left <= right){int mid = (left + right) / 2;if (arr[mid] >= arr[end]){right = mid - 1;}elseleft = mid + 1;}return left;
}
int main()
{int arr[6] = { 1,3,4,5,6,2 };//创建数组for (int i = 1; i < 6; i++){int right = i-1;//右边界int ret = efcz(arr, right);//二分查找插入位置int tem = arr[i];//临时变量for (int j = right; j >= ret; j--)//数组从ret到rihgt整体后移一格{arr[j + 1] = arr[j];}arr[ret] = tem;//插入}return 0;
}

结尾

看到这里的小伙伴们想必都已经掌握了插入排序的使用方法,如果觉得博主讲的不错的话,能不能给博主一个免费的关注,点赞,收藏支持一下呢?博主将持续分享更多知识,关注博主不迷路哦~,我们下期再见!
(对了,今天是圣诞节,小伙伴们圣诞节快乐!)

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

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

相关文章

商务大厦安装电气火灾监控系统,从源头监控电气火灾

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;介绍分析剩余电流式电气火灾监控系统的特点、组成、设计依据、监控原理和实施方案&#xff0c;并结合上海市某大厦工程设计实例探讨该系统在高层建筑中的设置要求和应用方式&#xff0c;供设计人员参考。 关键词&…

蓝桥杯嵌入式LED

1.LED原理图 2.CubeMX的LED的GPIO 3.创建LED.c和.h文件添加到bsp文件 添加bsp文件路径在c/c中 4.LED相关代码

Django之DRF框架三,序列化组件

一、序列化类的常用字段和字段参数 常用字段 字段名字段参数CharFieldmax_lengthNone, min_lengthNone, allow_blankFalse, trim_whitespaceTrueIntegerFieldmax_valueNone, min_valueNoneFloatFieldmax_valueNone, min_valueNoneBooleanFieldNullBooleanFieldFloatFieldmax_…

【隐私保护】使用Python从文本中删除个人信息:第一部分

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

【开源】基于JAVA语言的大学生相亲网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询会员4.2 查询相亲大会4.3 新增留言4.4 查询新闻4.5 新增新闻 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的大学生相亲网站&#xff0c;包含了会员管理模块、新闻管…

图灵日记之java奇妙历险记--输入输出方法数组

目录 输入输出输出到控制台从键盘输入使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 猜数字方法方法定义方法调用的执行过程实参和形参的关系(重要)方法重载 数组数组的创建数组的初始化动态初始化静态初始化 数组的使用元素访问遍历数组 数组是引用类型null数组应…

龙芯杯个人赛串口——做一个 UART串口——RS-232

文章目录 Async transmitterAsync receiver1. RS-232 串行接口的工作原理DB-9 connectorAsynchronous communicationHow fast can we send data? 2.波特率时钟生成器Parameterized FPGA baud generator 3.RS-232 transmitter数据序列化完整代码&#xff1a; 4.RS-232 receiver…

CEC2013(python):六种算法(RFO、PSO、CSO、WOA、DBO、ABC)求解CEC2013

一、六种算法简介 1、红狐优化算法RFO 2、粒子群优化算法PSO 3、鸡群优化算法CSO 4、鲸鱼优化算法WOA 5、蜣螂优化算法DBO 6、人工蜂群算法 &#xff08;Artificial Bee Colony Algorithm, ABC&#xff09; 二、6种算法求解CEC2013 &#xff08;1&#xff09;CEC2013简…

一篇讲透:箭头函数、普通函数有什么区别

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 什么是箭头函数 箭头函数和普通函数的区别 更简洁的语法 箭头函数…

Rancher小白学习之路

官网&#xff1a;http://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexhttp://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexRancher2.5集群搭建&K3S生产环境搭建手册 - 知乎 【rancher教程】十年运维大佬两小时带你搞定ran…

Order Delivery for WooCommerce电商商城订单一体化交付解决方案

Order Delivery for WooCommerce电商商城订单一体化交付解决方案 Order Delivery for WooCommerce电商商城订单一体化交付解决方案使客户可以在结账过程中轻松选择订单的交付日期和时间。 Order Delivery for WooCommerce电商商城订单一体化交付解决方案 让您的客户以流畅且…

分割时间方法

输入开始时间和结束时间以及时间间隔&#xff0c; 并以数组形式输出其中的时间段 const generateTimeSlots (startHour: number, endHour: number, intervalMinutes: number) > {const slots [];let currentTime new Date().setHours(startHour, 0, 0, 0);const endTime…

redis—String字符串

目录 前言 1.字符串数据类型 2.常见命令 3.典型应用场景 前言 字符串类型是Redis最基础的数据类型&#xff0c;关于字符串需要特别注意: 1)首先Redis中所有的键的类型都是字符串类型&#xff0c;而且其他几种数据结构也都是在字符串类似基础.上构建的&#xff0c;例如列表…

【2024 行人重识别最新进展】ReID3D:首个关注激光雷达行人 ReID 的工作!

【2024 行人重识别最新进展】ReID3D&#xff1a;首个关注激光雷达行人 ReID 的工作&#xff01; 摘要&#xff1a;数据集&#xff1a;方法模型&#xff1a;多任务预训练&#xff1a;ReID Network&#xff1a; 实验结果&#xff1a;结论&#xff1a; 来源&#xff1a;Arxiv 2023…

drf知识--05

两个视图基类 # APIView&#xff1a;之前一直在用---》drf提供的最顶层的父类---》以后所有视图类&#xff0c;都继承自它 # GenericAPIView&#xff1a;继承自APIView--》封装 继承APIView序列化类Response写接口 # urls.py--总路由 from django.contrib import admin from dj…

ElasticSearch 使用映射定义索引结构

动态映射 dynamic 可选值解释true默认值&#xff0c;启用动态映射&#xff0c;新增的字段会添加到映射中runtime查询时动态添加到映射中false禁用动态映射&#xff0c;忽略未知字段strict发现未知字段&#xff0c;抛出异常 显示映射 创建映射 PUT user {"mappings&qu…

Elasticsearch可视化平台Kibana [ES系列] - 第498篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 全…

three.js后处理(发光描边OutlinePass描边样式

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"></div>&…

圆通速递查询,圆通速递单号查询,对需要的单号记录进行标记

随着网购的普及&#xff0c;快递服务已经深入到我们生活的方方面面,我们每天都需要处理大量的快递信息,为了更高效地管理这些信息&#xff0c;【快递批量查询高手】应运而生。 所需工具&#xff1a; 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤&#xff1a; …

不同参数规模大语言模型在不同微调方法下所需要的显存总结

原文来自DataLearnerAI官方网站&#xff1a; 不同参数规模大语言模型在不同微调方法下所需要的显存总结 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703254378255 大模型的微调是当前很多人都在做的事情。微调可以让大语言模型适应特定领域的任…