• 21天打卡挑战 - 经典算法之直接插入排序


    ​CSDN打卡活动产出

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
    想系统/深入学习某技术知识点…
    一个人摸索学习很难坚持,想组团高效学习…
    想写博客但无从下手,急需写作干货注入能量…
    热爱写作,愿意让自己成为更好的人…

    创作计划


    机缘

    实战项目中的经验分享
    日常学习过程中的记录
    通过文章进行技术交流

    收获

    希望以此结交到志同道合的朋友

    日常

    平均每周产出2-3篇文章.

    有限的精力下,只能少一些玩游戏的时间,陪女朋友的时间不敢少

    憧憬

    期待粉丝上万 浏览过百万!!

    **

    学习计划

    学习目标

    永远充满热情,坚持21天学习打卡

    学习内容

    直接插入排序

    学习日记


    学习知识点

    原理含义

            每次从原有数据中取出一个数,插入到之前已经排好的序列中,直到所有的数全部取完,那么新的有序排列也就完成了。
            通俗一点的解释就是好比我们在打扑克抓牌,所有的牌扣在桌面上,我们一张一张的抓,抓起一张就在手里把它排好。那么等我们把所有的牌都抓起来之后,手里的牌也都是有序的了。

     

    算法流程

            对于计算机来说,我们必须要详细的告诉它如何比较大小,以及如何确定位置,毕竟它不能像我们一样,“一眼"就看出位置。试想一下,当数据量比较多的时候,我们也是需要一个一个的看过来,然后才能确定新插入元素的位置。

     

    算法复杂度

    时间复杂度:平均O(n^2),最好O(n), 最坏O(n^2)
    空间复杂度:O(1)

    插入排序动图

     C代码

    1. void insertsort(int array[],int len){
    2. int i,j;
    3. //第一个for循环 遍历无序序列
    4. for(i=1;i//从数组的第二个元素开始依次遍历无序序列
    5. int tem = array[i]; //临时保存将要排序的元素
    6. //第二个for循环遍历有序序列
    7. for(j=i-1;tem<=array[j]&&j>=0;j--){ //将待排序元素依次和有序序列中的元素比较
    8. //待排序元素 小于 有序序列中当前元素时 将该元素后移
    9. array[j+1] = array[j];
    10. }
    11. array[j+1] = tem; //待排序元素 大于 有序序列最后一个元素 直接将该元素插入到有序序列最后
    12. }
    13. printf("\n排好了!\n\n");
    14. }

    念念不忘,必有回响

  • 相关阅读:
    [递归]有理数树
    fdisk分区以及格式化磁盘简要步骤
    springboot+redis实现延迟队列(内含Redisson版本)
    计算机毕业设计Java校园社团管理平台(源码+系统+mysql数据库+Lw文档)
    批量拉取所有子目录 git pull --all
    七月集训(第31天) —— 状态压缩
    触发器,寄存器,三态输出电路
    【Axure高保真原型】3D圆柱图_中继器版
    基于JavaWeb技术的在线考试系统设计与实现
    同旺科技 USB TO SPI / I2C --- 调试W5500
  • 原文地址:https://blog.csdn.net/qq_52213943/article/details/126217194