数据结构--插入排序

一、算法思想:

每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列中

例如:把13拿出来不断的进行比较再左移

二、代码实现(一):每一个元素拿出来与它的前后进行对比

用 temp 存储当前拿出来的元素:防止操作时候被覆盖

注意循环中的:

复制代码
for(j=i-1;j>=0 && A[j] > temp; --j)
{
    A[j+1] = A[j]  //j+1 == i(当前处理的元素位置)  j == i-1(这个大于当前处理元素的元素位置)
 }                 //前一位赋值给后一位
  
 A[j+1] = temp

代码实现(二):哨兵实现

把当前处理的元素放到最开头 A[0] 的位置

三、算法的空间复杂度:

O(1): 因为我们用的方法不是temp就是哨兵,都是常数级别的,所以所占的空间就是1

四、算法的时间复杂度:

O(n) : 需要 n-1 趟的对比判断------最好的情况下

O(n²):------ 原本就是逆序排列的 ------最坏的情况下

五、优化操作

(图中蓝色数字是要插入的元素,

绿色是已经有的序列,

红色是复制要插入的元素)

折半查找

例如处理60 的时候

第一个被检查的位置是50

50 < 60

low = mid + 1

mid = (low + high) / 2 -----检查的是60

60 == 60 ------- 当找到当前处理元素的值相同时,继续在mid所指右边查找

当high < low 的时候,停止查找

六、对链表的插入排序

相关推荐
wen__xvn8 分钟前
代码随想录算法训练营DAY6第三章 哈希表part01
数据结构·算法·散列表
漫随流水8 分钟前
leetcode算法(239.滑动窗口最大值)
数据结构·算法·leetcode
橘颂TA40 分钟前
【剑斩OFFER】算法的暴力美学——字母异位词分组
数据结构·算法·leetcode·力扣·哈希算法·散列表·结构与算法
黎雁·泠崖44 分钟前
【线性表系列终篇】链表试炼:LeetCode Hot 100 经典题目实战解析
c语言·数据结构·leetcode·链表
Sunsets_Red1 小时前
对于吉司机线段树下传懒标记的顺序的解释
c语言·数据结构·数据库·c++·算法·c#·学习方法
C雨后彩虹1 小时前
几何平均值最大子数组
java·数据结构·算法·华为·面试
想进个大厂1 小时前
代码随想录day2 滑动窗口
java·数据结构·算法
有一个好名字1 小时前
力扣-子数组最大平均数 I
数据结构·算法·leetcode
Dylan的码园1 小时前
优先级队列(堆) 与 Priority Queue
java·数据结构·算法
就这个丶调调1 小时前
Redis深度使用指南:数据结构、持久化策略与Java实战全解析
java·数据结构·redis·缓存·nosql·持久化·高性能