查找与排序-插入排序

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)该算法是稳定算法。

相关推荐
FakeOccupational5 分钟前
【电路笔记 仿真】SPICE仿真器软件 LTspice:绘制简单电路(新建图页+添加组件)并仿真+模型导入+SUBCKT (子电路)绘制与使用+特殊器件绘制
笔记
是上好佳佳佳呀1 小时前
【深度学习|Day01】PyTorch 深度学习笔记(上):框架认知与张量基础
pytorch·笔记·深度学习
x17388062732 小时前
目录遍历漏洞
笔记·目录遍历漏洞
砚凝霜3 小时前
软考网络工程师|第 5 章 广域网基础技术完整备考笔记
网络·笔记
oier_Asad.Chen3 小时前
【OI学习笔记】Floyed-Warshall算法解决传递闭包问题
c++·笔记·学习·算法·图论·最短路·传递闭包
鱼听禅3 小时前
C#学习笔记-添加编译参数到程序集自动更新程序编译时间
笔记·学习·c#
香菜TTT3 小时前
LangChain框架_学习笔记
笔记·学习·langchain
春水碧于天,画船听雨眠3 小时前
LangChain学习笔记(二)
笔记·学习·langchain
210Brian4 小时前
STM32学习笔记(四)OLED显示屏与Keil调试
笔记·stm32·学习
笑一下蒜了.5 小时前
DNS 原理与 BIND 权威服务器实操笔记
运维·服务器·笔记