首页 > 编程语言 >写一个方法实现“插入排序算法”,并解释下时间复杂度和空间复杂度

写一个方法实现“插入排序算法”,并解释下时间复杂度和空间复杂度

时间:2025-01-22 09:10:02浏览次数:1  
标签:arr 复杂度 插入 算法 排序 插入排序

插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

以下是一个使用JavaScript实现的插入排序算法:

function insertionSort(arr) {
    let n = arr.length;
    for (let i = 1; i < n; i++) {
        // 选择一个待插入的数据
        let value = arr[i];
        // 从已排序序列中从后向前扫描
        let j = i - 1;
        while (j >= 0) {
            if (arr[j] > value) {
                // 如果该元素(已排序)大于新元素,将该元素移到下一位置
                arr[j + 1] = arr[j];
            } else {
                // 找到已排序的元素小于或者等于新元素的位置,即找到了插入位置
                break;
            }
            j--;
        }
        // 插入新元素
        arr[j + 1] = value;
    }
    return arr;
}

时间复杂度:

  • 最好情况:输入数组已经是升序排列了,那么此时的时间复杂度是O(n),因为此时内层循环(while语句)将不会执行。
  • 最坏情况:输入数组是降序排列,那么此时的时间复杂度是O(n^2)。因为此时内层循环(while语句)每次都会执行,将每个元素都移动到其应该在的位置。
  • 平均情况:时间复杂度也是O(n2)。因此,虽然插入排序在处理部分已排序的数据时可能效率较高,但在平均情况下,其性能并不优于其他O(n2)的排序算法。

空间复杂度:

  • 插入排序的空间复杂度是O(1)。这是因为它是一种原地排序算法,只需要一个额外的存储空间来暂存待插入的元素。也就是说,这个算法只需要常量级的额外空间,与输入数组的大小无关。

标签:arr,复杂度,插入,算法,排序,插入排序
From: https://www.cnblogs.com/ai888/p/18684971

相关文章

  • 03垃圾回收篇(D1_垃圾收集器算法底层导论)
    目录一、为什么我们要去了解垃圾收集和内存分配二、对象已死?1.引用计数算法2.可达性分析算法3.再谈引用4.生存还是死亡5.回收方法区三、垃圾收集算法1.简介2.分代收集理论2.1.弱分代/强分代假说2.2.前面两代假说的缺陷3.标记-清除算法(Mark-Sweep)4.标......
  • Java 大视界 -- Java 大数据中的强化学习算法实践与优化 (57)
           ......
  • 细说机器学习算法之XGBoost及代码实现
    系列文章目录第一章:Pyhton机器学习算法之KNN第二章:Pyhton机器学习算法之K—Means第三章:Pyhton机器学习算法之随机森林第四章:Pyhton机器学习算法之线性回归第五章:Pyhton机器学习算法之有监督学习与无监督学习第六章:Pyhton机器学习算法之朴素贝叶斯第七章:Pyhton机器学习算......
  • GRFB UNet——基于多尺度注意网络盲道检测算法实现与模型C++部署
    GRFBUNet——基于多尺度注意网络盲道检测算法实现与模型C++部署1.概述盲道是视障人士安全出行的重要辅助设施。识别盲道的形状和位置,对于增强视障人士的自主移动能力至关重要,而视觉分割技术正是应对这一挑战的有效工具。为了显著提升盲道分割的精确度和稳定性,本文提出了......
  • 2.优化算法
    2.1小批量梯度下降应用:深度学习处理大数据集的时候会选用小批量梯度下降算法深度学习在大数据领域应用广泛,但是海量数据的训练又涉及速度问题,所以选择算法就尤其重要。批量梯度下降:可以同时处理整个训练集(完整的训练集X,Y)举例:把一个500w的训练集分成1000份,每份5000个......
  • 2025牛客寒假算法基础集训营1
    A.茕茕孑立之影题意:给你\(n\)个数,你要找一个数使得这个数和数组的任意一个数都不成倍数关系。如果数组里有\(1\)肯定不行,\(1\)是所有数的因子。其他情况我们只需要找一个大质数就行,因为值域只有\(1e9\),可以输出\(1e9+7\)。点击查看代码voidsolve(){ intn; std::cin>>......
  • 2025牛客寒假算法基础集训营1 ptlks的题解
    A.茕茕孑立之影题意:给定序列,找出一个数x,满足x和数组中任意一个元素都互不为倍数关系思路x范围为1e18以内,序列元素范围为1e9以内,选大于1e9的质数即可,特判序列中有1的情况。代码点击查看代码voidsolve(){ intn; cin>>n; intf=1; for(inti=1;i<=n;i++){ cin>>a[......
  • 头歌实训作业 算法设计与分析-贪心算法(第2关:最优装载问题)
    任务描述有一批集装箱要装上一艘载重量为C的轮船,共有n个集装箱,其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。测试说明输入和输出说明:第1行为集装箱数目n和载重限制C第2行~第n+1行为n个集装箱的重量输出最优装载......
  • 将机器学习算法移植到低端MCU上的实用指南
    将机器学习算法移植到低端MCU上的实用指南在物联网(IoT)和边缘计算迅猛发展的今天,将智能功能嵌入到资源有限的低端单片机(MicrocontrollerUnit,MCU)上,已经成为许多开发者和工程师追求的目标。然而,这一过程充满挑战,但只要掌握正确的方法,也能在低端MCU上实现高效的机器学习应用。......
  • 元强化学习算法—— EMCL —— 《Adapting to Dynamic LEO B5G Systems Meta-Critic L
    原文地址:https://orbilu.uni.lu/bitstream/10993/52996/1/Adapting_to_Dynamic_LEO-B5G_Systems_Meta-Critic_Learning_Based_Efficient_Resource_Scheduling.pdfPS:大概距离这个论文是fake的,无法做验证,其中对引用的算法的描述也是错的,基于一堆错误的东西能搞错对的东......