查找与排序-插入排序

1.直接插入排序的基本思想

假设n个数据元素关键字存储在静态数组a中,则直接插入排序的基本思想可做如下描述:

(1)初始有序子序列由一个元素a0 组成;

(2)从a1开始,对于序列中每个元素ai,利用顺序查找在有序子序列中找到其合适位置,然后将后面的元素向后移动,并将ai插入。

(3)重复上述步骤,直到整个序列有序,算法结束。

2.直接插入排序举例

例:设待排元素序列为{56,25,70,99,82,10,15,56},请给出按直接插入排序算法进行排序的过程。

3.直接插入排序算法代码

复制代码
def insertion_sort(self):
    for i in range(1, len(self.data)):  # 依次将i号记录插入在表中0至i-1部分的有序序列中
       	 if self.data[i] < self.data[i - 1]:
           temp = self.data[i]
           j = i - 1
           while j >= 0 and self.data[j] > temp:  # 依次与之前的每个记录关键字比较
               self.data[j + 1] = self.data[j]  # 如前面记录更大则后移
	           j -= 1  # j往前移动
                self.data[j + 1] = temp  # temp记录放在j+1位置

4.直接插入排序算法分析

(1)空间复杂度:只需要一个记录大小的辅助空间来临时存放待插入记录,空间复杂度O(1)。 (2)时间复杂度:最好情况下,如果数组本身是从小到大排列的,每趟操作只需要1次比较,总比较次数为n-1,不需要移动数据元素。最坏情况下,如果数组是从大到小排列的,那么关键字的总比较次数为n(n-1)/2,移动的次数为n(n-1)/2,因此时间复杂度为O(n2) 。

(3)该算法是稳定算法。

相关推荐
zhangrelay8 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
Jimmy9 小时前
深夜突袭:我们的午夜战场
笔记·产品·电子书
志尊宝11 小时前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native
lll235269177912 小时前
线下多人发言对比与录音操作
笔记·智能手机
叼烟扛炮12 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
深圳老胡15 小时前
STM32C5A3ZG 网络调试总结:从启动失败到连续 Ping 稳定
笔记·stm32·单片机·代码规范
职豚求职小程序刷题15 小时前
宁德时代社招高岗晋升测评笔试改版了
笔记
CarIise15 小时前
JDBC 与数据库事务核心
数据库·笔记
鬼手点金15 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
摇滚侠15 小时前
《On Java 中文版 基础卷》阅读笔记 初始化和清理 08
java·开发语言·笔记