插入排序详解(C语言)

news2024/9/24 15:19:45

前言
插入排序是一种简单直观的排序算法,在小规模数据排序或部分有序的情况下插入排序的表现十分良好,今天我将带大家学习插入排序的使用。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;
		}
		else
			left = 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.coloradmin.cn/o/1335008.html

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

相关文章

SQL优化 - 索引成本计算和优化建议

Mysql优化器会对SQL进行优化生成执行计划&#xff0c;后续所有的执行流程都是按照这样的执行计划执行&#xff0c;在此阶段就会决策评估索引的选择&#xff0c;mysql在对于索引选择会有关键性的评估依据&#xff1a;成本 说白了&#xff0c;假如有2个索引&#xff0c;优化器会…

由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。

问题描述&#xff1a; 由于被认为是客户端对错误&#xff08;例如&#xff1a;畸形的请求语法、无效的请求信息帧或者虚拟的请求路由&#xff09;&#xff0c;服务器无法或不会处理当前请求。 在实现向数据库中添加记录时&#xff0c;请求发送无效&#xff0c;参数也未传递到控…

VTK+QT配置(VS)

先根据vtk配置这个博客配置基本环境 然后把这个dll文件从VTK的designer目录复制到qt的对应目录里 记得这里是debug版本&#xff0c;你也可以配置release都一样的步骤&#xff0c;然后建立一个qt项目&#xff0c;接着配置包含目录&#xff0c;库目录&#xff0c;链接输入&…

jQuery实现layer.open中按钮倒计时读秒可用的协议阅读场景

今日遇到一个系统注册页网站 条款签接受流程改动的需求&#xff0c;往日多是使用他人网站注册登录&#xff0c;看见相关协议的授权设计大同小样&#xff0c;觉得挺有意思&#xff0c;这次遇到了需要我来实现这个功能&#xff0c;但是用习惯了vue的封装&#xff0c;这次是依靠jQ…

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

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

20231225使用亿佰特的蓝牙模块dongle协议分析仪E104-2G4U04A抓取BLE广播数据

20231225使用亿佰特的蓝牙模块dongle协议分析仪E104-2G4U04A抓取BLE广播数据 结论&#xff1a;硬件蓝牙分析仪 不一定比 手机端的APK的效果好&#xff01; 亿佰特E104-2G4U04A需要3片【单通道】&#xff0c;电脑端的UI为全英文的。 BLE-AnalyzerPro WCH升级版BLE-PRO蓝牙分析仪…

【本地运行AI绘画】ComfyUI的安装与使用(一)(windows+1660ti 6G显存)

官方源码&#xff1a;https://github.com/comfyanonymous/ComfyUI/ 官方环境包: https://github.com/comfyanonymous/ComfyUI/releases 百度网盘下载&#xff1a; 显卡驱动cu11以下下载cu118。 显卡驱动12以上可以下载cu121 一、下载、更新、启动comfyui 百度网盘链接&#xf…

自动驾驶中的“雷达”

自动驾驶中有好几种雷达&#xff0c;新手可能会蒙蔽&#xff0c;这里统一介绍一下它们。 首先&#xff0c;所有雷达的原理都是发射波&#xff0c;接收回波&#xff0c;并通过发射和接收的时间差以及波的速度计算距离。只不过发射的波不同&#xff0c;功能也不同。 激光雷达 …

浅谈师范双非普本工科专业的秋招历程

本人普通师范院校通信工程专业&#xff0c;于秋招历程之中四处碰壁&#xff0c;迫于家庭等各种因素考虑&#xff0c;最终选择移动的偏远县城岗位的OFFER&#xff01;本人秋招历程之中&#xff0c;屡屡碰壁&#xff0c;也算得上“收获满满”&#xff01;我简单给各位浅谈一下我的…

【K8S基础】-k8s的核心概念控制器和调度器

Kubernetes是一个开源的容器编排平台&#xff0c;旨在简化和自动化容器化应用程序的部署、扩展和管理。它提供了一个强大的基础设施来管理容器化应用程序的生命周期&#xff0c;并确保它们在整个集群中高效运行。 Kubernetes的核心概念包括集群、节点、Pod、控制器、调度器等。…

面向对象编程(中级)(蹭)

面向对象编程&#xff08;中级&#xff09; 1、包 &#xff08;1&#xff09; 什么是包&#xff1f; 在Java中&#xff0c;包&#xff08;Package&#xff09;是用于组织和管理类以及其他Java 程序元素的一种机制。它是一种命名空间&#xff0c;可以将相关的类和接口组织在一…

C++11(上):新特性讲解

C11新特性讲解 前言1.列表初始化1.1{ }初始化1.2std::initializer_list 2.类型推导2.1 auto2.2 typeid2.3 decltype 3.范围for4.STL的变化4.1新容器4.2容器的新方法 5.右值引用和移动语义5.1 左值引用和右值引用5.2 左值引用与右值引用比较5.3 右值引用的使用场景5.4 右值、左值…

[C/C++]数据结构: 链式二叉树的构建及遍历

一: &#x1f4ac;二叉树的概念 1.1:&#x1f6a9; 概念 二叉树是指树中节点的度不大于2的有序树,它是一种最简单且重要的树,二叉树的递归定义为:二叉树是一颗空树,或者是一颗由一个根节点和两颗互不相交的,分别称为跟的左孩子和右孩子树组成的非空树,其中左子树和右子树都是二…

设计模式详解:代理模式

1. 什么是代理模式&#xff1f; 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许通过代理对象控制对另一个对象的访问。代理模式在客户端和目标对象之间引入了一个代理对象&#xff0c;客户端通过代理对象间接地访问目标对象&#xff0c…

ComfyUI完整安装教程(Windows版)

话不多说&#xff0c;地址供上&#xff1a; GitHub - comfyanonymous/ComfyUI: The most powerful and modular stable diffusion GUI with a graph/nodes interface.The most powerful and modular stable diffusion GUI with a graph/nodes interface. - GitHub - comfyanon…

如何使用内网穿透工具实现Java远程连接本地Elasticsearch搜索分析引擎

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…

如何修复无法读取的U盘,修复U盘的方法

无法读取U盘是常见的故障&#xff0c;可能的原因有很多&#xff0c;例如U盘驱动器问题、文件系统损坏、电脑USB接口问题等。本文将详细分析这些原因&#xff0c;并提供相应的解决方法&#xff0c;帮助用户解决无法读取U盘的问题。 如何修复无法读取的U盘&#xff0c;修复U盘的方…

一篇了解什么是Token、什么是Jwt

目录 Token什么是TokenToken实现认证流程优缺点 JWT什么是JWTJWT组成JWT加密流程优缺点 Token与JWT的区别常见的加密算法 Token 什么是Token Token: Token是访问资源接口&#xff08;API&#xff09;时所需要的资源凭证&#xff0c;也成为令牌 传统的Token 传统的Token&am…

MongoDB数据库本地部署并结合内网穿透实现navicat公网访问

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

框架面试题

文章目录 1. spring中的bean是线程安全的吗2. 事务的实现--AOP3. 项目中用到的AOP4.spring中事务的失效场景5. Bean的生命周期6.spring中的循环引用问题7. springMVC的执行流程8. springboot自动装配原理9. 常见注解10 Mybatis11 Mybatis一二级缓存 1. spring中的bean是线程安全…