首页 > 其他分享 >03 插入排序

03 插入排序

时间:2024-05-09 13:45:25浏览次数:25  
标签:sort 03 arr key 插入排序 len insertion com

1.插入排序的含义

  • 类似扑克牌,假设认为0-0位置有序,再把0-1的位置变有序,循环直到所有的有序。每次拿取右侧的数字,一个一个对比放到左侧来。

2.示例代码

def insertion_sort(arr):
    if arr is None or len(arr) < 2:
        return
    for i in range(1, len(arr)):
        # 0 ~ i-1 有序,新来的是[i]向左看
        # 遍历一遍,把右侧新的无序[i],向左侧一个一个比较,放到合适的位置上
        key = i - 1   # 当前数的前一个位置
        # j+1是当前数
        # 1 4 5 | 2 # 现在2是无序的
        while key >= 0 and arr[key] > arr[key + 1]:   # 5比2大吗?
            arr[key], arr[key + 1] = arr[key + 1], arr[key] # 交换后1 4 2 5
            key -= 1    #  新的key是2的位置

# Example usage
arr = [3, 2, 1, 5, 4]
insertion_sort(arr)
print(arr) # Output: [1, 2, 3, 4, 5]

3.练习代码

def insertion_sort(arr):
    n = len(arr)
    for i in range(1,n):
        key = i-1
        while key >=0 and arr[key] > arr[key+1]:    # 向左侧冒泡
            arr[key],arr[key+1] = arr[key+1],arr[key]
            key -= 1
    return arr

arr = [1,2,5,8,3]
print(insertion_sort(arr))

4.截图

5.感悟

  • 加油,总以为自己不行,实际上自己很厉害!

6.代码思路

  • 感觉设置一个key更好理解。

7.参考文献

动图:https://www.runoob.com/w3cnote/insertion-sort.html

代码:https://github.com/algorithmzuo/algorithm-journey/blob/main/src/class004/SelectBubbleInsert.java

视频:https://www.bilibili.com/video/BV12P41147to/?spm_id_from=333.999.0.0&vd_source=6176e79b66461eb74da787cb8321925b

 

标签:sort,03,arr,key,插入排序,len,insertion,com
From: https://www.cnblogs.com/liqi175/p/18181981

相关文章

  • P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G
    链接:https://www.luogu.com.cn/problem/P2341题目:思路:tarjan缩点:把所有强连通分量缩成一个点,然后统计出度为0的缩点,如果只有一个,那么能成为明星的数量就是该缩点扩充后的个数;如果不止一个,那就是0.代码:额,就是不知道为什么debug了两节课.......#include<iostream>#include<v......
  • 冒泡排序、插入排序、选择排序
    冒泡排序思想:从左到右,元素交换。第一个元素和第二个元素比较,若第一个元素大于第二个,则交换元素,再第二个元素与第三个元素比较,依次比较,直到比较完。则最尾部的元素是最大值。voidmaopao(inta[5],intsi){for(inti=0;i<si-1;i++){for(intj=0;......
  • Day03
    目录一、用例执行二、缺陷(一)定义(二)判定标准(三)产生原因(四)软件缺陷的生命周期(五)软件缺陷的核心内容(六)缺陷提交要素(七)缺陷类型案例一、用例执行执行结果与用例的期望结果(含义)不一致,为缺陷二、缺陷工作流程:设计用例→执行用例(执行测试)→缺陷(提交、验证、关闭)(一)定义软件在使......
  • Elements in iteration expect to have 'v-bind:key' directives.
    当组件中使用v-for时,如果不指定key,则会有红色警告信息。解决方案如下。方案一:绑定key(亲试有效)//方式一<liv-for="(item,index)inlist":key="index">//方式二<liv-for="(item,index)inlist":key="item.id">//方式三<liv-for="(item,in......
  • unsupported operand type(s) for +: 'function' and 'str'
    unsupportedoperandtype(s)for+:'function'and'str'报错解释:这个错误表明你尝试将一个函数和一个字符串进行加法操作,在Python中,加法不支持对函数和字符串进行。解决方法:确认你的代码中是否有误,检查是否不小心将函数名直接与字符串用+相连。如果你的意图是调用函数并与字符......
  • Cannot resolve method 'and(java.util.function.Predicate<java.lang.String>)
    springboot整合knife4j报错,提示找不到该方法,用的knife4j依赖是最新版本解决方法:将knife4j版本进行降级处理,这里采用2.0.4......
  • INFO1113 / COMP9003 Assignment
    TaskDescriptionInthisassignment,youwillcreateagameintheJavaprogramminglanguageusingtheProcessinglibraryforgraphicsandgradleasadependencymanager.Inthegame,playerscontroltankswhichcanaimandfireateachother.Playersgai......
  • Linux基础03-Linux文件操作命令
    其实啊,说起计算机操作,大部分情况下就是“增删改查”这四个大字儿,文件操作也是这么回事儿。就是改文件的时候得用点专门的编辑器,比如那个Vim。不过Vim这东西,真心不是一两句话就能给你讲清楚的,咱们在后续的章节再好好说道说道。现在学文件操作命令的时候,如果得改文件内容,咱们就先......
  • 从零手写实现 tomcat-03-基本的 socket 实现
    创作缘由平时使用tomcat等web服务器不可谓不多,但是一直一知半解。于是想着自己实现一个简单版本,学习一下tomcat的精髓。系列教程从零手写实现apacheTomcat-01-入门介绍从零手写实现apacheTomcat-02-web.xml入门详细介绍从零手写实现tomcat-03-基本的socket实......
  • 【初中英语提分神器】中考高频词汇大全003-D开头单词高频,轻松掌握,考试无忧!速来围观!
    PDF格式公众号回复关键字:ZKGCH003D开头单词高频动词1decide决定”或“判定We'llhavetodecidewhattodonext.(我们必须决定下一步该做什么。)Thejudgedecidedinfavorofthedefendant.(法官判定被告胜诉。)2dislike/hatedislike不喜欢Hedislikesbeingl......