数据结构:直接插入排序

直接插入排序是数据结构中较为简单的插入排序法,基本思想是:把待排序的记录按照关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插完为止,得到一个新的有序序列。

实际上我们玩扑克时,就用了插入排序的思想。我们将每一张新摸到的牌都插入到自己的牌里,使其形成从大到小的排列。

下面我们用代码来实现一下,不同的是将一个乱序的数组排列成一个有序的。

创建一个end变量让其指向数组中下标为0的元素,也就是第一个元素,再让tmp被赋值为指end+1下标的元素,也就是第二个元素,然后进入while循环,如果tmp < arr[end],就让end指向的元素走向end+1处,将其覆盖,并且end--,持续遍历,如果end越界了(end<0),直接跳出,将tmp覆盖掉end+1指向的下标元素,也就是下标为0的元素处。

当tmp走到最后一个元素的时候,此时刚好循环到第八次(因为tmp是从数组第二个元素为起点往后走的),如果在走一次就会越界,所以我们for循环中结束条件为 i < n-1 。

下面我们来看一下结果:

直接插入排序特性总结:

  1. 元素集合越接近有序,直接插入排序算法时间效率越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)
相关推荐
雅欣鱼子酱7 分钟前
Type-C供电PD协议取电Sink芯片ECP5702,可二端头分开供电调整亮度,适用于LED灯带户外防水超亮灯条方案
c语言·开发语言
颜酱25 分钟前
BFS 与并查集实战总结:从基础框架到刷题落地
javascript·后端·算法
casual~1 小时前
第?个质数(埃氏筛算法)
数据结构·c++·算法
仰泳的熊猫1 小时前
题目2308:蓝桥杯2019年第十届省赛真题-旋转
数据结构·c++·算法·蓝桥杯
hssfscv2 小时前
力扣练习训练2(java)——二叉树的中序遍历、对称二叉树、二叉树的最大深度、买卖股票的最佳时机
java·数据结构·算法
Yungoal2 小时前
B/S和C/S架构在服务端接收请求
c语言·开发语言·架构
y = xⁿ3 小时前
【LeetCodehot100】二叉树大合集 T94:二叉树的中序遍历 T104:二叉树的最大深度 T226:翻转二叉树 T101:对称二叉树
后端·算法·深度优先
不想看见4043 小时前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy3 小时前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
jaysee-sjc3 小时前
【练习十二】Java实现年会红包雨小游戏
java·开发语言·算法·游戏·intellij-idea