排序算法---插入排序

插入排序的思想

每一趟将一个待排序元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上,直到所有待排序元素元素全部插入为止。

插入排序的代码实现

第一轮:

j = 0 对比值:5 6>5 6,6,4 j = -1 5,6,4

第二轮:

j = 1 对比值:4 5>4 5,6,6

j = 0 对比值:4 5,5,6 j=-1 4,5,6

javascript 复制代码
function insertionSort(arr) {
    var i, j, key;
    for (i = 1; i < arr.length; i++) {
        key = arr[i];
        j = i - 1;
 
        // 将大于key的元素向后移动
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        // 插入key
        arr[j + 1] = key;
    }
    return arr;
}

插入排序的复杂度

时间复杂度

插入排序的平均时间复杂度为O(n^2),其中n是数组的长度。最好情况下是O(n)

空间复杂度:O(1)

相关推荐
JAVA面经实录9172 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
开源Z4 小时前
LeetCode 42 · 接雨水:从暴力到双指针的三步优化
算法·leetcode
旖-旎4 小时前
《LeetCode 695 岛屿的最大面积 FloodFill DFS 解法》
c++·算法·力扣·深度优先遍历·floodfill
影视飓风TIM4 小时前
数据结构 | 链表超全笔记(单链表+双链表+高频算法题)
数据结构·笔记·链表
syagain_zsx4 小时前
STL 之 vector 讲练结合
c++·算法
牛油果子哥q5 小时前
STL set与map底层精讲,红黑树适配原理、有序去重特性、迭代器遍历、API实战与面试核心考点全解
开发语言·数据结构·c++·面试
MartinYeung56 小时前
[论文学习]DP2Unlearning:高效且具保证的大型语言模型遗忘框架(基于差分隐私的 LLM Unlearning 方法)
学习·算法·语言模型
Tian_Hang6 小时前
C++原型模式(Protype)
开发语言·c++·算法
bIo7lyA8v6 小时前
算法复杂度的渐进分析与实际运行时间的差异的技术8
算法