码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 七大排序之直接插入排序


    目录

    1、基本思想

    2、代码讲解和实现

    3、特性总结

    3.1 时间复杂度:

    3.2 空间复杂度:

    3.3 适合场景:


    时间复杂度:O(n)  ~ O(n^{2}) 

    空间复杂度:O(1)

    稳定性:  稳定      

    1、基本思想

            直接插入排序是一种简单的插入排序法,其思想就是把待排序的数按照其大小逐个插入到一个已将排好的有序序列中,直到所有的记录插入完为止。

    实际中,我们在玩扑克牌时,就与运用了插入排序的思想。

    2、代码讲解和实现

            当插入第i(i>=1)个元素时,前面的array[0]、array[1].....array[i-1] 已经排好序。

    第一步:定义一个 j 变量并赋值为i-1,同时定义一个 val 变量存储一下 array[i]的值。

    第二步:让array[j] 与 val 进行比较

            如果 array[j] 大于 val , 就把array[j]向前挪一步,也就是 array[j+1] = array[j]。

            如果 array[j] 小于等于 val,就把 val 放到 array[j+1]中。

    j 必须 大于等于0 ,要不然会越界。

    1. public static void insertSort(int[] array){
    2. for (int i = 1; i < array.length; i++) {
    3. int j = i-1;
    4. int val = array[i];
    5. for(; j >= 0 ; j--){
    6. if(array[j] > val){
    7. array[j+1] = array[j];
    8. }else{
    9. break;
    10. }
    11. }
    12. array[j+1]= val;
    13. }
    14. }

    3、特性总结

    3.1 时间复杂度:

    当数据有序时,直接插入排序耗时最少,为 O(n)

    数据有序时,外循环每遍历一个元素,都比前 i-1个元素都大,内循环相当于没有执行。总的时间就是遍历数组的时间。

    当数据逆序时,耗时最多,为 O(n^{2})

    数据逆序,每次插入第 i 个元素,内循环都要遍历 i-1 次。当 n 数排序完,也就是遍历了 \tfrac{n*(n-1)}{2}次

     3.2 空间复杂度:

           因为直接插入排序是内部排序,所以空间复杂度为 O(n)

    3.3 适合场景:

            当数据基本上是有序的时候,使用直接插入排序

  • 相关阅读:
    基于STM32的CAN通讯测试:让地球仪转起来
    QT6.6 android下fftw-3.3.10库编译及调用so库方法
    <Linux系统复习>命令行参数和环境变量
    接口自动化测试工具,Postman使用详解
    Python 实现行为驱动开发 (BDD) 自动化测试详解
    Centos系统初始化脚本
    几个JavaScript编写技巧
    Go-Python-Java-C-LeetCode高分解法-第十周合集
    Windows取证——隐藏用户
    虹科方案 | AR助力仓储物流突破困境:规模化运营与成本节约
  • 原文地址:https://blog.csdn.net/weixin_53564801/article/details/125965951
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号