当前位置:网站首页>插入排序(Insertion Sort)
插入排序(Insertion Sort)
2022-08-05 21:58:00 【DeeGLMath】
插入排序(Insertion Sort)
一、基本思想
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
二、实现逻辑
有一组数字:{5, 2, 4, 6, 1, 3},将这组数字从小到大进行排列。从第二个数字开始,将其认为是新增加的数字,第二个数字只需与其左边的第一个数字比较后排好序;在第三个数字,认为前两个已经排好序的数字为手里整理好的牌,那么只需将第三个数字与前两个数字比较即可;以此类推,直到最后一个数字与前面的所有数字比较结束,插入排序完成。
算法步骤:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的序列中从后向前扫描;
- 如果已排序序列中的某元素大于新元素,则将该元素移到下一位置;
- 重复步骤 3,直到找到已排序的元素小于或等于新元素的位置;
- 将新元素插入到该位置;
- 重复步骤 2 ~ 5。
三、时间复杂度的分析
如果插入排序的目标是把 n n n 个元素的序列升序排序,那么:
- 若序列已经是升序排列,只需要比较 n − 1 n-1 n−1 次即可,即最好时间复杂度为: Ω ( n ) \Omega(n) Ω(n);
- 若序列是降序排列,那么由于序列至多有 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2 对逆序,即最坏时间复杂度为: O ( n 2 ) O(n^2) O(n2)。
对于平均时间复杂度而言,长度为 n n n 的序列有 n ! n! n! 种排列,故每一种序列的排列平均有 n ( n − 1 ) / 4 n(n-1)/4 n(n−1)/4 对逆序,故有平均时间复杂度为: Θ ( n 2 ) \Theta(n^2) Θ(n2)。
四、空间复杂度的分析
由于算法采用的是in-place排序方法,不会额外开辟 O ( n ) O(n) O(n) 的数组空间(out-place排序),所以空间复杂度为: O ( 1 ) O(1) O(1)。
五、算法实现
直接插入
def insertion_sort(array: List) -> None:
''' 支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。 '''
for index in range(1, len(array)):
key = array[index]
pre = index - 1
while pre >= 0 and key < array[pre]:
array[pre + 1] = array[pre]
pre -= 1
array[pre + 1] = key
折半插入
def insertion_sort(array: List) -> None:
''' 支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。 '''
for index in range(1, len(array)):
key = array[index]
low, high = 0, index - 1
while low <= high: # 符合单调性的序列
mid = (low + high) // 2
if key > array[mid]:
low = mid + 1
else:
high = mid - 1
for pre in range(index, low, -1): # 从后往前
array[pre] = array[pre - 1]
array[low] = key
边栏推荐
猜你喜欢
随机推荐
CRC_8 计算方法及代码实现
C语言基础演练(9)
【笔记】数据分析实战:从数据清洗到ROC曲线
自学建模,用什么方法最有效,游戏建模都要用到哪一些呢?
使用cpolar优化树莓派上的网页(4)
大热的“数字艺术品”存储在哪?会不会丢?
dart learning record - Updating
了解MySQL数据页吗?说说什么是页分裂吧!
【PCB开源分享】STC15F2K61S2开发板
ZeroMQ替代ros
CAN-Oe 通道配置方法
ESP8266-Arduino编程实例-红外寻迹传感器驱动
7月末出去玩啦,给大家分享一个青岛攻略吧~
奇瑞艾瑞泽8将于9月26日正式上市,产品阵营将扩充
软件测试概念扫盲
docker安装postgresql数据库
Shell编程之循环语句与函数
What is the difference between Set, Map, WeakSet and WeakMap?
MQ的概念
中国石油大学(北京)-《油气藏经营管理 》在线考试









