排序算法(二):插入排序

插入排序是一个对少量元素进行排序的有效算法。插入排序和很多人打牌时,整理手中的牌时的做法差不多。在开始摸牌时,我们的左手是空的,接着,一次从桌上摸起一张牌,为了找到这张牌的正确位置,我们需要把这张牌和已有的牌一一做对比。

代码实现:

python 复制代码
def insert_sort(data):
    i = 1
    total = len(data)
    while i < total:
        current = data[i]

        if current > data[i-1]:
            i = i + 1
            continue
        else:
            j = i - 1

            while j >= 0:
                if data[j] < current:
                    break

                if data[j] > current:
                    data[j+1] = data[j]

                j -= 1

            data[j+1] = current

            i += 1

    return data

插入排序的核心思路是:

前一个位置的数字和当前位置上的数字做对比,如果当前位置大于前一个位置,那就不动,如果比前一个位置上的数字小,那就把前一个位置上的数字后移,继续做比较,直到找到当前位置上的数字的正确位置,然后赋值。

插入排序和冒泡排序的区别是,冒泡排序是相邻2个位置上的数字做对比,然后两两交换位置,插入排序是前面位置上的数字和当前位置上的数字做对比。

相关推荐
jiaway11 小时前
【C语言】第二课 位运算
c语言·开发语言·算法
Q741_14711 小时前
C++ 面试高频考点 力扣 153. 寻找旋转排序数组中的最小值 二分查找 题解 每日一题
c++·算法·leetcode·面试·二分查找
麦格芬23012 小时前
LeetCode 994 腐烂的橘子
算法·leetcode·职场和发展
mit6.82412 小时前
[re_3]
c++·算法
LDG_AGI12 小时前
【推荐系统】推荐召回算法(一):双塔召回模型训练与推理(Dual Tower Model and Faiss Retrieval)
算法
程序员Xu12 小时前
【LeetCode热题100道笔记】轮转数组
笔记·算法·leetcode
JuneXcy12 小时前
指针高级(3)
数据结构·算法
数维学长98612 小时前
【全网最全】《2025国赛/高教杯》C题 思路+代码python和matlab+文献 一到四问 退火算法+遗传算法 NIPT的时点选择与胎儿的异常判定
开发语言·算法·matlab
zhuoya_13 小时前
子串:最小覆盖子串
java·数据结构·算法·leetcode
only-qi13 小时前
leetcode111. 二叉树的最小深度
数据结构·算法