数据结构:直接插入排序

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

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

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

创建一个end变量让其指向数组中下标为0的元素,也就是第一个元素,再让tmp被赋值为指end+1下标的元素,也就是第二个元素,然后进入while循环,如果tmp < arrend,就让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)
相关推荐
Pniubi8 分钟前
力扣24. 两两交换链表中的节点(递归)
算法·leetcode·链表
nice_lcj52016 分钟前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
꧁细听勿语情꧂1 小时前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
俊俊几年的1 小时前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c
小雉系统10 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
§ꦿCFོ༉11 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
Pniubi13 小时前
关于算法用现成数据结构和手撕
数据结构
唐墨12315 小时前
linux kernel 比较数据大小的宏定义
linux·算法
拂拉氏15 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口