【学习分享】小白写算法之插入排序篇

【学习分享】小白写算法之插入排序篇

  • 前言
  • 一、什么是插入排序算法
  • 二、插入排序算法如何实现
  • 三、C语言实现算法
  • 四、复杂度计算
  • 五、算法稳定性
  • 六、小结


前言

要学好每个算法,我觉得需要先总结出规律,然后自己去推演一遍,加深记忆,否则的话很难真正领悟算法真谛,以后也很难实际去应用起来。所以沉下心来慢慢学,学会算法真的很有意思哈~


一、什么是插入排序算法

想象一下我们在打扑克,我们每拿到一张牌习惯于将其插入到手中的扑克中并按顺序排列,这个就是我们第一次接触到插入排序算法。
在这里插入图片描述
如下动图展示了从10到1的逆序序列如何进行插入排序到顺序序列的过程。
在这里插入图片描述


二、插入排序算法如何实现

我们设定一个序列{6,5,3,4,2,1},第i轮需要做的事情是把第i个数插入到正确的位置。
在这里插入图片描述

插入到正确的位置怎么实现?
我们选择第3轮进行分析,分析见下图。
在这里插入图片描述

分析:
所以第3轮中一共执行了3次。
第1次4跟第2个(数组中计数从0位开始)数6比较,6大,所以6向右移动1位,在第2位插入4。
第2次4跟第1个数5比较,5大,所以5向右移动1位,在第1位插入4。
第3次4跟第0个数3比较,4大,所以4不移动,相当于在第1位插入4。第3轮排序结束。

其他依次类推,可以得出如下规律:
第i轮中一共执行了i次。
先记录一下第i个数为key。在i的范围内用参数j来指向每次比较位,j的初始值为i-1
第i次key跟第j位的数进行比较,如果第j位的数>key,那么第j位的数向右移动1位,然后在第j位插入key。
如果第j位的数≤key,那么不移动,在第(j+1)位插入key。
在这里插入图片描述
但是这样有个问题,就是插入key的位置不统一,为了统一插入key的位置,我们修改下如上的规律,改成下面的方式:
第i次key跟第j位的数进行比较,如果第j位的数>key,那么第j位的数向右移动1位,先让j=j-1,然后在第(j+1)位插入key。
如果第j位的数≤key,那么不移动,在第(j+1)位插入key。(这样可以统一插入key的位置到j+1位)。
这个就是插入排序的算法了。


三、C语言实现算法

void insertionsort(int arr[],int n)   //插入排序算法
{
    for(int i=1;i<n;i++)
        {
            int key = arr[i];       //暂存第i位的数到参数key
            int j=i-1;              //从第i-1位开始和key进行比较
            while(j>=0 && arr[j]>key)   //关键语句,j=-1或者第j位比key要小退出循环
            {
                 arr[j+1] = arr[j];    //如果第j位>key,那么第j位右移到第j+1位
                 j = j-1;              //j继续左移j=j-1;
            }
            arr[j+1] = key;            //在第j+1位插入暂存在key的第i位数值。
        }
}

加入打印后用gcc编译后运行,得到的结果也是符合预期的。
在这里插入图片描述
在《软件设计师教程》里算法是这样写的,这种写法和冒泡排序的写法很像,看个人选择。

void insertsort(int arr[],int n)
{
	int i,j;
	int tmp;
	for(i=1;i<n;i++)
	{	
        if(data[i]<data[i-1])  //如果第i位数≥第i-1位数,不移动。
        {
            tmp = data[i];     //如果第i位数<第i-1位数,则插入到比第i位大的第j位。
            data[i] = data[i-1];
            for(j=i-1;j>=0 && data[j] > tmp;j++)
                data[j+1] = data[j];
            data[j+1] = tmp;
        }	
    }	
}

四、复杂度计算

时间复杂度很容易计算,跟冒泡排序类似。一共嵌套了两次,时间复杂度就是O(n^2)。
在这里插入图片描述
空间复杂度也很容易计算,三个临时参数i,key,j,所以空间复杂度就是O(3),记为O(1)。
在这里插入图片描述
对这部分有疑问的请先看前面的文章复杂度计算部分
【学习分享】小白写算法之冒泡排序篇


五、算法稳定性

因为相同元素的情况下插入排序算法是不改变元素相对位置的,这个很好理解吧,所以插入排序算法是稳定的。
在这里插入图片描述


六、小结

插入排序算法在中间实现过程比冒泡排序有一点点绕的地方,但是深入理解下其实也还好,复杂度和稳定性都是一样的,两者有共通的地方,学会总结规律就可以掌握了。码字不易,且行且珍惜~~

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

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

相关文章

阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…

【记录】LangChain|llama 2速通版

官方教程非常长&#xff0c;我看了很认可&#xff0c;但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求。所以有了这篇文章。【写给自己看的&#xff0c;里面半句废话的解释都没有&#xff0c;如果看不懂的话直接看官方教程再看我的】 我是不打算一开始就用…

Jenkins (四) - 搭建 Docker SonarQube

Jenkins (四) - 搭建 Docker SonarQube 拉取 SonarQube $ docker pull sonarqube拉取 postgres $ $ docker pull postgres运行 postgres $ docker run -itd \ -e TZAsia/Shanghai -e POSTGRES_USERtester \ -e POSTGRES_PASSWORD123456 \ -p 5432:5432 \ -v /home/tester/d…

京东云服务器4核8G主机租用价格418元一年,1899元3年

京东云轻量云主机4核8G服务器租用价格418元一年&#xff0c;1899元3年&#xff0c;配置为&#xff1a;轻量云主机4C8G-180G SSD系统盘-5M带宽-500G月流量&#xff0c;京东云主机优惠活动 yunfuwuqiba.com/go/jd 可以查看京东云服务器详细配置和精准报价单&#xff0c;活动打开如…

【mac操作】brew指令集

brew指令集记录 1. brew search 【软件名称】2. rm -rf $(brew --cache)3. brew install 【软件名】4. brew uninstall 【软件名】5. 未完待续&#xff0c;&#xff0c;&#xff0c;&#xff0c; 官网路径&#xff1a; Homebrew官网 最上面就来一个homebrew安装指令吧&#xf…

win10上一个详细的Django开发入门例子

1.Django概述 Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。 Django 框架的核心组件有&#xff1a; 用于创建模型的对象关系映射&#xff1b; 为最终用户设计较好的管理界面&#xff1b…

阿里云倚天云服务器详解_CPU采用倚天710处理器

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…

c# wpf LiveCharts MVVM绑定 简单试验

1.概要 c# wpf LiveCharts MVVM绑定 简单试验 2.代码 <Window x:Class"WpfApp3.Window3"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://s…

gitea简单介绍

Gitea是一个轻量级的开源自托管Git服务&#xff0c;提供了类似GitHub的功能和界面。它是一个简单、易于安装和使用的Git代码托管解决方案&#xff0c;适用于个人、小型团队和企业。 Gitea的主要特点如下&#xff1a; 自托管&#xff1a;Gitea允许在自己的服务器上搭建和管理…

web安全学习笔记(6)

记一下第十节课的内容。 一.PHP语言中的if else判断 语法和c语言中非常类似&#xff0c;不再赘述&#xff0c;也可以使用if...elseif...elseif...else 1.True和False 2.&#xff0c;和 一个等号是赋值 两个等号是比较 三个等号是全等&#xff08;内容相等&#xff0c;数…

调用阿里云API接口实现电商领域命名实体识别NER

文章目录 阿里云简介命名实体识别NER阿里云API注册调用代码阿里云简介 阿里云是全球领先的云计算及人工智能科技公司,成立于2009年,为200多个国家和地区的企业、开发者和政府机构提供服务。阿里云提供了一系列的云计算服务,包括服务器租赁、云数据库、云存储、人工智能等,…

pytest的时候输出一个F后面跟很多绿色的点解读

使用pytest来测试pyramid和kotti项目&#xff0c;在kotti项目测试的时候&#xff0c;输出一个F后面跟很多绿色的点&#xff0c;是什么意思呢&#xff1f; 原来在使用pytest进行测试时&#xff0c;输出中的“F”代表一个失败的测试&#xff08;Failed&#xff09;&#xff0c;而…

自动驾驶中的交通标志识别原理及应用

自动驾驶中的交通标志识别原理及应用 附赠自动驾驶学习资料和量产经验&#xff1a;链接 概述 道路交通标志和标线时引导道路使用者有秩序使用道路&#xff0c;以促进道路行车安全&#xff0c;而在驾驶辅助系统中对交通标志的识别则可以不间断的为整车控制提供相应的帮助。比如…

Yalmip使用教程(7)-求解器的参数设置

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 这篇博客将详细介绍yalmip工具箱中常用的求解器设置选项。 1.求解器的基本设置 使用sdpsettings函数可以对求解的相关参数进行设置。最常用的设置…

【操作系统】STM32-操作系统——持续更新

【操作系统】STM32-操作系统——持续更新 文章目录 前言一、ucosii二、freertos1.介绍2.移植 总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、ucosii UCOSII移植到STM32F103C8T6上之移植记录&#xff08;一&#xff09; UCOSII移植到ST…

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年&#xff0c;35M带宽&#xff0c;配置为&#xff1a;16C64G-450G SSD系统盘-35M带宽-8000G月流量 华北-北京&#xff0c;京东云活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云16核64G云服务器…

通用爬虫的概念简述

一、&#x1f308;什么是通用爬虫 通用爬虫&#xff08;General Purpose Web Crawler或Scalable Web Crawler&#xff09;是一种网络爬虫&#xff0c;其设计目标是对整个互联网或尽可能广泛的网络空间进行数据抓取。通用爬虫主要用于搜索引擎构建其庞大的网页索引数据库&#…

LaTeX 空格与换行

任意多个空格与一个空格的功能相同。只有字符后面的空格是有效的&#xff0c;每行最前面的空格被忽略。单个换行被视作一个空格&#xff0c;连续两个换行表示分段。~被称作一种不可打断的空格&#xff0c;排版系统不会在这种空格之间换行。西文的逗号、句号和分号等标点后面应该…

二分查找 -- 力扣(LeetCode)第704题

题目 https://leetcode.cn/problems/binary-search/description/ 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例…

【毕业论文】酒店价格采集与可视化查询设计与实现开题报告2000字

酒店价格采集与可视化查询设计与实现开题报告 研究背景 随着互联网技术的飞速发展&#xff0c;人们获取信息的途径越来越多样化。特别是在旅游行业中&#xff0c;消费者对于酒店价格的透明度和实时性要求越来越高。美团、大众点评、抖音等平台作为信息聚合和分享的重要渠道&a…