程序员必须掌握的排序算法:插入排序的原理与实现

news2024/9/22 23:47:28

在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《数据结构&算法》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!

📋 前言

插入排序八大排序之一是一种非常简单直观的排序算法,尽管插入排序在时间复杂度上并不是最优的选择,但它的思想简单直观,易于实现。而且根据插入排序我们还可以推演出希尔排序这种效率更高的排序。

  • 今天就来带大家看一下选择排序的实现和完部代码吧

文章目录

  • 📋 前言
  • 一、插入排序的思想
  • 二、插入排序的具体实现
    • 2.1 实现思路
    • 2.2 实现代码
  • 三、插入排序的时间复杂度
  • 📝文章结语:

一、插入排序的思想

直接插入排序是一种简单的插入排序法,其基本思想是:

把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列

而我们从小被人熟知的扑克牌的摸牌的过程就非常像插入排序
在这里插入图片描述

二、插入排序的具体实现

插入排序对的思想就是每次把后面的一个值和前面的有序序列进行对比:

  • 如果比他大就把比他大的数往后移动
  • 直到遇到比我们要比较的值小的时候就停下来然后插入
    在这里插入图片描述

2.1 实现思路

所以实现思路也就很简单了 首先 需要一个end来表示有序队列的队尾:

  • 🔥 然后再 定义一个 tmp 用于和前面的有序序列进行比较
  • 🔥 而每一次插入一个数都需要遍历一遍比较所以还需要一个
  • 🔥 while循环来遍历,找到了位置之后就把 tmp 插入进去

2.2 实现代码

🍸 代码演示:

void insertsort(int* str,int n)
{
	
	for (size_t i=0; i<n-1; i++)
	{
		int end = i;
		int tmp = str[end + 1];
		while (end >= 0)
		{
			if (str[end] > tmp)
			{
				str[end + 1] = str[end];
			}
			else
			{
				break;
			}
			end--;
		}

		str[end+1] = tmp;
	}
	
}

三、插入排序的时间复杂度

由于插入排序每次,都要遍历一下再找打插入的位置所以插入排序的时间复杂度是

  • 时间复杂度:O(N*N)
  • 空间复杂度:O(1) 它并没有开辟额外空间

总结来说插入排序是一个非常稳定的算法,元素集合越接近有序,直接插入排序算法的时间效率越高。

📝文章结语:

☁️ 把本章的内容全部掌握,铁汁们就可以熟练应用switch语句啦!
看到这里了还不给博主扣个:
⛳️ 点赞🍹收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
在这里插入图片描述

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

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

相关文章

【笔记】入门PCB设计(全30集带目录) 杜洋工作室 AD09 Altium Designer

入门PCB设计&#xff08;全30集带目录&#xff09; 杜洋工作室 AD09 p1 创建p2 原理图上增加元件1&#xff09;加元件2&#xff09;放导线3&#xff09;自定义元件1. 自定义排针2.有引脚的元件 p3 完整原理图 p1 创建 step1.创建&#xff08;PCB&#xff09;工程,后缀.PrjPCB。…

LeetCode-相交链表(160)

题目描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据保证整个链式结构中不存在环。 注意&#xf…

RK3588平台开发系列讲解(AI 篇)RKNN 数据结构详解

文章目录 一、rknn_sdk_version二、rknn_input_output_num三、rknn_tensor_attr四、rknn_perf_detail五、rknn_perf_run六、rknn_mem_size七、rknn_tensor_mem八、rknn_input九、rknn_output沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解 RKNN 相关的数…

智能优化算法应用:基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.广义正态分布算法4.实验参数设定…

歌曲春节回家:歌手荆涛探寻家庭与归属感的深刻内涵

歌曲春节回家&#xff1a;歌手荆涛探寻家庭与归属感的深刻内涵 春节&#xff0c;对于中国人来说&#xff0c;是一个意义非凡的节日。它不仅仅是一个传统的庆祝活动&#xff0c;更是一种深深的家庭情怀和归属感的体现。荆涛的《春节回家》这首歌&#xff0c;以其深情的旋律和富…

一文读懂“负载均衡”

负载均衡无处不在&#xff0c;无论是分布式&#xff0c;还是中间件&#xff0c;还是微服务&#xff0c;都需要涉及到负载均衡。 一、什么是负载均衡 负载均衡是一种在计算机网络和系统架构中使用的技术&#xff0c;用于均衡分发工作负载到多个资源&#xff0c;比如&#xff1…

异常和智能指针

智能指针的认识 智能指针是一种C语言中用于管理动态内存的工具&#xff0c;它们可以自动管理内存的分配和释放&#xff0c;从而避免内存泄漏和悬空指针等问题。智能指针可以跟踪指向的对象的引用次数&#xff0c;并在需要时自动释放被引用的内存&#xff0c;这极大地提高了内存…

w15php系列之基础类型

一、计算100之内的偶数之和 实现思路 所有的偶数除2都为0 代码实现 <?php # 记录100以内的偶数和 $number1; $num0; while($number<100){if($number%20){ $num$number;}$number1; } echo $num; ?>输出的结果 二、计算100之内的奇数之和 实现思路 所有的奇数除…

不可能得到的最短骰子序列

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 给你一个长度为 n 的整数数组 rolls 和一个整数 k 。你扔一个 k 面的骰子 n 次&#xff0c;…

【华为OD机试真题2023CD卷 JAVAJS】两个字符串间的最短路径问题

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 两个字符串间的最短路径问题 知识点数组动态规划字符串 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定两个字符串,分别为字符串A与字符串B。例如A字符串为ABCABBA,B字符串为CBABAC可以得到下图m*n的二…

算法与数据结构--二叉搜索树与自平衡二叉搜索树

0.字典&#xff08;即c的map&#xff09; 注&#xff1a;字典的 "member运算" 指的是检查字典中是否存在某个特定的键的操作&#xff0c;即查询操作。 如果我们使用数组来实现字典/map&#xff0c;虽然使用二分法查询也可以达到logn&#xff0c;但是的话插入和删除太…

HAL库的常用库函数(根据学习而更新)

目录 一、常用的GPIO相关HAL库函数 1、GPIO的初始化 2、配置GPIO引脚输出电平 3、切换指定引脚的电平&#xff0c;电平的翻转 4、读取指定GPIO引脚的电平 5、结构体 GPIO_InitTypeDef &#xff08;引脚&#xff09;定义&#xff1a; 6、高低电平的表示 7、延时函数&…

使用TLS/SSL Pinning保护安卓应用程序

使用TLS/SSL Pinning保护安卓应用程序 在现代术语中&#xff0c;“SSL”&#xff08;安全套接层&#xff09;通常指的是“TLS”&#xff08;传输层安全&#xff09;。虽然 SSL 和 TLS 不是同一个东西&#xff0c;但 TLS 是 SSL 的改进和更安全的版本&#xff0c;并且在实践中已…

【环境配置】虚拟环境配置

创建虚拟环境 conda create -n pytorch python3.9安装成功提示 激活虚拟环境 activate pytorch安装pytorch 查看 python 版本——python 退出 python——exit() 对照 python 与 pytorch 的对应关系 pytorch 地址&#xff1a; https://pytorch.org/get-started/previous-…

Web前端VScode/Vue3/git/nvm/node开发环境安装

目录 1 基本配置 2 安装vscode 3 安装vue 4 配置bash 5 安装nvm 6 安装node 7 安装yarn 8 新建项目 9 运行helloworld 1 基本配置 本篇是为了做前端开发的环境而写。使用的操作系统是windows 10 64位 2 安装vscode 现在做vue和node基本就是vscode和webstorm&#x…

添加调试日志,bug消失

参考&#xff1a;就删了个printf&#xff0c;代码崩了&#xff01; 1、运行报错代码 #include "stdio.h" #include "stdlib.h" #include "string.h"void func1() {int arr[10];memset(arr, 1, sizeof(arr)); }void func2() {int index;int* ar…

《我在北京送快递》平凡隽永的时刻,对人生更具意义

《我在北京送快递》平凡隽永的时刻&#xff0c;对人生更具意义 胡安焉 文章目录 《我在北京送快递》平凡隽永的时刻&#xff0c;对人生更具意义[toc]摘录感悟 摘录 转“没有期限的承诺无疑就是委婉的拒绝” 转书友&#xff1a;亨利福特说&#xff0c;我聘的是一双手&#xff0…

逆向P1P2总结

字节八位 word 16位 deword 32 位 00 00 00 e8 是存储32位信息的起点 不是程序运行的起点 为什么电脑有32位与64位之分 寻址宽度 以字节为单位 0xfffffff 1 就是最大容量 转为十进制为 4294967296 / 1024 &#xff08;k&#xff09;/1024 &#xff08;kb&#xff09;/ 1…

Vue 封装echarts饼状图(Pie)组件

目的&#xff1a;减少重复代码&#xff0c;便于维护 效果显示&#xff1a; 组件代码 <template><div class"ldw-data-content-box"><div class"ldw-chilren-box"><div class"title"><div>{{ title }}</div>…

JavaScript进阶(事件+获取元素+操作元素)

目录 事件基础 事件组成 执行事件的步骤 获取元素 根据ID获取元素 根据标签名获取元素 获取ol中的小li 类选择器&#xff08;html5新增的I9以上支持&#xff09; 获取body和html 操作元素 innerText和innerHtml 表单标签 样式属性操作 操作元素总结 事件基础 事…