排序算法——直接插入排序

   直接插入排序与希尔排序是插入排序的两个分支,直接插入排序是较为简单的一种排序算法,同时也是众多算法实现或优化的基石。

前提:

     插入排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,是稳定的排序方法。

       简单来说,就是打斗地主时,你已经摸了几张牌并将牌从小到大排列成有序的概况,这时再摸一张牌,将其也插入到合适的位置,使所有牌继续有序。

算法思想分析:

   直接插入排序自然秉承了这一思想,直接插入排序算法的思想是:当插入第i个元素时,arr[0]到arr[i-1]个元素已经排好序,这时用array[i]按与array[i-1],array[i-2],…的顺序依次进行比较,如果找到合适的位置就将arr[i]插入,没找到就继续比较,原来位置的元素顺序后移。

  有图有真相:

举个例子:

 

arr[i]=27,在arr[i]前面的数字已经有序,这时就将arr[i]与arr[i-1]ye也就是27与47比较。

27小,47向后移。

arr[i]再与arr[i-2]也就是44比

,27小,44向后移.......

与arr[i-4](即36)比较,36小,36向后移。

直到遇到arr[i-5]也就是26,27比26大。27插入到原arr[i-4]的位置,单趟排序结束。

 代码如下:

这里我们定义一个变量end,假设从a[0]到a[end]范围有序,定义tmp保存下标为第end+1的数。

while循环,如果tmp比它前一个数小,前一个数后移,tmp继续比较。直到遇到比tmp小的或者tmp最小(end=-1,tmp应落到arr[0]位置),循环结束。将tmp赋给end+1的位置,保持有序。

  上面这段代码目的是将第i个数插入到合适的位置,也就是说这是一个单趟排序。;了解了单趟排序,将一堆杂乱的数排序成有序序列(多趟排序)就很简单了:

我们在while循环外再套一层for循环,当i=0时,只有一个数据,是有序的。

i=1时,两个数据:进行比较.......

最后当end=n-2时(倒数第二个元素),与最后一个数比较,整个数组有序。

检验:

最后的打印函数一并在这。

时间复杂度:O(n^2)

        最坏情况全部杂乱,需要单趟排序一次一次重复比较,铁铁的O(n^2);

        最好情况就是全部有序,此时只需遍历一次,这时时间复杂度为O(n);

空间复杂度:O(1)

它是一种稳定的排序算法  

 

 

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

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

相关文章

BigKey的危害

1.2.1、BigKey的危害 网络阻塞 对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例,乃至所在物理机变慢 数据倾斜 BigKey所在的Redis实例内存使用率远超其他实例,无法使数据分片的内存资源达到均衡 Redis阻…

nginx--自定义日志跳转长连接文件缓存状态页

自定义日志服务 [rootlocalhost ~]# cat /apps/nginx/conf/conf.d/pc.conf server {listen 80;server_name www.fxq.com;error_log /data/nginx/logs/fxq-error.log info;access_log /data/nginx/logs/fxq-access.log main;location / {root /data/nginx/html/pc;index index…

C/C++ BM33 二叉树的镜像

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 总结 前言 镜像说的好听,无非就是换下节点。 题目 操作给定的二叉树,将其变换为源二叉树的镜像。 数据范围:二叉树的节点数 0 ≤ n ≤ 1000 0≤n≤1000 0≤n≤1000, 二叉树每…

ThreeJS:本地部署官网文档与案例

部署方式 部署之前请确保已经配置好node.js环境。 1. 下载ThreeJS源码 ThreeJS的GitHub地址:GitHub - mrdoob/three.js: JavaScript 3D Library.,可以简单查看ThreeJS当前版本:r164, 我们可以选择对应的版本(此处为r1…

打印机-STM32版本 硬件部分

最终PCB EDA工程: 一、确定芯片型号 根据项目需求,梳理需要用到的功能, 电量检测:ADC 按键:IO input外部中断 LED:IO output 温度检测:ADC 电机控制:IO output 打印通讯:SPI …

淘宝/天猫商品评论API接口:用户反馈实时追踪与商家决策优化

一、引言 在电子商务迅猛发展的今天,淘宝/天猫作为中国最大的电子商务平台之一,为众多商家提供了广阔的舞台。然而,面对日益激烈的市场竞争,如何精准把握用户需求、优化产品策略、提升服务质量,成为摆在众多商家面前的…

Linux环境与历史和Xshell安装与使用

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Linux是一个操作系统.全称叫Linux is not UNIX。由…

【C++】哈希的应用---位图

目录 1、引入 2、位图的概念 3、位图的实现 ①框架的搭建 ②设置存在 ③设置不存在 ④检查存在 ​4、位图计算出现的次数 5、完整代码 1、引入 我们可以看一道面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数…

通过iMock学习Jvmsandbox

Jvm-sandbox Jvm-sandbox基于Jvm-sandbox的Mock平台iMockiMock的工程学习iMock怎么写的(sandbox的module应该怎么写) Jvm-sandbox Jvm-sandbox是阿里开源的一款java的沙箱,看网上的介绍在沙箱里你可以做你能想到的奇妙的事情。 基于Jvm-san…

智慧旅游开启智慧生活,科技让旅行更轻松:通过智慧旅游,旅行者可以享受到更加便捷、高效的旅行服务,让旅行成为生活的一部分

一、引言 随着科技的飞速发展,我们生活的方方面面都在经历着前所未有的变革。旅游业作为服务业的重要组成部分,也在这场变革中迎来了前所未有的发展机遇。智慧旅游,作为科技与旅游深度融合的产物,正以其独特的魅力,引…

瑞_23种设计模式_解释器模式

文章目录 1 解释器模式(Interpreter Pattern)1.1 介绍1.2 概述1.2.1 文法(语法)规则1.2.2 抽象语法树 1.3 解释器模式的结构1.4 解释器模式的优缺点1.5 解释器模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代…

信息时代的智慧导航:高效搜索、信息筛选与信任构建的全面指南!

文章目录 一、高效搜索:快速定位目标信息的秘诀二、信息筛选:去伪存真,找到有价值的信息三、信任构建:深入了解与直接沟通《搜索之道:信息素养与终身学习的新引擎》亮点内容简介目录获取方式 随着科技的飞速发展&#…

小白总结uniapp微信小程序跨域问题的解决(前端)

前言:本人前端小白一枚,在B站听了一个很不错的视频,关于uniapp Vue3超详细教程,有需要的小伙伴可以去听,受益匪浅,下面是该博主的链接: gitee源码地址:https://gitee.com/qingnian8/…

windows 驱动开发-DMA技术(三)

在早期,是按照基于包或者基于流的方式来描述DMA的,不过这个描述可能不准确,故在Vista之后修改为使用数据包/使用公共缓冲区的系统DMA。 简单的解释一下基于包和基于流的说法的原因,数据包是指一个个基于一定大小的数据块&#xf…

Tensorflow2.0笔记 - ResNet实践

本笔记记录使用ResNet18网络结构,进行CIFAR100数据集的训练和验证。由于参数较多,训练时间会比较长,因此只跑了10个epoch,准确率还没有提升上去。 import os import time import tensorflow as tf from tensorflow import keras …

数据库和缓存一致性问题

hello,各位小伙伴们大家好,我是颜书凌,下面给大家讲解一下数据库和缓存的一致性问题,话不多说 1、一致性介绍 一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。 强一致性…

2024年【G3锅炉水处理】试题及解析及G3锅炉水处理模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年G3锅炉水处理试题及解析为正在备考G3锅炉水处理操作证的学员准备的理论考试专题,每个月更新的G3锅炉水处理模拟考试题祝您顺利通过G3锅炉水处理考试。 1、【多选题】在可逆反应中,下面哪…

Node.js -- express 框架

文章目录 1. express 使用2. 路由2.1 路由的使用2.2 获取请求报文参数2.3 获取路由参数2.4 路由参数练习 3. express 响应设置4. 中间件4.1 全局中间件4.2 路由中间件4.3 静态资源中间件 5. 获取请求体数据 body-parser6. 防盗链7. 路由模块化8. 模板引擎8.1 了解EJS8.2 列表渲…

面试二十四、继承多态

一、继承的本质和原理 组合(Composition): 组合是一种"有一个"的关系,表示一个类包含另一个类的对象作为其成员。这意味着一个类的对象包含另一个类的对象作为其一部分。组合关系通常表示强关联,被包含的对象…

【Week-Y7】使用自己的数据集训练YOLO-v8

文章目录 一、官方环境配置与测试1. 配置环境2. 用官方图片测试(图片下载失败)3. 用本地图片测试,检查配置的环境是否可用 二、使用自己的数据集进行训练测试1. 执行split_train_val.py文件2. 执行python .\voc_label.py文件3. 创建fruit.yam…