2.插入排序

原理

遍历给定的无序序列, 将选中的元素插入已排好序的序列中, 直到序列中所有元素都在正确位置

算法步骤

插入排序的核心思想是将待排序序列分为已排序区间和未排序区间,初始时已排序区间只包含第一个元素,然后依次从未排序区间中取出元素,插入到已排序区间的正确位置,直至未排序区间为空。

动态演示

插入排序的动态演示

代码实现

# python
# 遍历整个数组
for index in range(len(array)):
    cur = index
    # 判断是否已在数组头部, 判断当前位置元素是否小于数组中前一个元素
    while cur > 0 and array[cur] < array[cur-1]:
        # 交换当前索引与其前一位索引的元素
        array[cur], array[cur-1] = array[cur-1], array[cur]
        # 索引向前移动
        cur -= 1
// golang
n := len(array)
for i := 1; i < n; i++ {
    cur := i
    for cur > 0 && array[cur] < array[cur-1] {
        array[cur], array[cur-1] = array[cur-1], array[cur]
        cur --
    }
}

算法特点

  • 简单直观:插入排序是一种容易理解和实现的排序算法,适用于小规模数据或部分有序的数据集合
  • 稳定性:插入排序是稳定的排序算法,相等元素的相对位置不会改变
  • 原地排序:插入排序是一种原地排序算法,只需要常数级的额外空间用于存储临时变量
  • 时间复杂度:最坏情况下的时间复杂度为 O(n^2),平均情况下的时间复杂度也是 O(n^2)。对于已基本有序的序列,插入排序的时间复杂度可以降低到 O(n)
    对于已基本有序的序列,插入排序的时间复杂度可以降低到 O(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值