【1.数据结构-1.8.1 排序】插入排序-希尔排序

一、插入排序

1.1 算法思想

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

  • 给定数组 :[49, 38, 65, 97, 76, 13, 27, 49]
  • 第一趟结果 :[38, 49, 65, 97, 76, 13, 27, 49],这里是38与49比较,38比49小,交换位置。


  • 第二趟结果 :[38, 49, 65, 97, 76, 13, 27, 49]
    -
    ...
    ...
    ...
  • 第七趟结果 :[13, 27, 38, 49, 49, 65, 76, 97]

1.2 算法实现

  • 不带哨兵

  • 带哨兵

1.3 效率分析

  • 空间复杂度
  • 时间复杂度-最好情况
  • 时间复杂度-最坏情况
  • 总结

1.4 优化--折半插入排序

  • 思路 :先用折半查找找到应该插入的位置,再移动元素

  • 当low>high时折半查找停止,应将[low,i-1]内的元素全部右移,并将A[0]复制到low 所指位置



    ...
    ...
    ...

  • 代码实现

  • 对链表进行插入排序

1.5 优化

二、希尔排序

2.1 希尔排序:先追求表中元素部分有序,再逐渐逼近全局有序

  • 第一趟



  • 第二趟


  • 第三趟:整个表已呈现出"基本有序",对整体再进行一次"直接插入排序"

2.2 算法实现

2.3 算法性能分析


2.4 总结

相关推荐
2401_8747325313 小时前
C++中的策略模式进阶
开发语言·c++·算法
steins_甲乙14 小时前
C# 通过共享内存与 C++ 宿主协同捕获软件窗口
开发语言·c++·c#·内存共享
j_xxx404_14 小时前
蓝桥杯基础--时间复杂度
数据结构·c++·算法·蓝桥杯·排序算法
章鱼丸-14 小时前
DAY34 GPU 训练与类的 call 方法
开发语言·python
2501_9454235414 小时前
C++跨平台开发实战
开发语言·c++·算法
英俊潇洒美少年14 小时前
函数组件(Hooks)的 **10 大优点**
开发语言·javascript·react.js
Oueii14 小时前
分布式系统监控工具
开发语言·c++·算法
小陈工14 小时前
2026年3月24日技术资讯洞察:边缘AI商业化,Java26正式发布与开源大模型成本革命
java·运维·开发语言·人工智能·python·容器·开源
haibindev14 小时前
把近5万个源文件喂给AI之前,我先做了一件事
java·前端·c++·ai编程·代码审计·架构分析
yymboss14 小时前
【JavaEE】Spring Boot 项目创建
java·spring boot·java-ee