插入排序Insert_Sort

Insert Sort

演示一下:

# 有这样一个无序列表,我们运用插入排序的方法来给它做升序排序
[9,4,3,7,6,1,8,2,5]
# 首先,我们把这个列表想像成一组牌,第一个的 9 是我们手上的(有序区),其余是要摸的(无序区),为了区分,在有序区于无序区之间搞一个分隔符
[9,'|', 4, 3, 7, 6, 1, 8, 2, 5]
# 我们第一张要摸的牌是 4 ,9比4大,所以,4应该放在9的左边,又因为9的旁边没有位置,所以9要向右移一个位置
[4, 9,'|', 3, 7, 6, 1, 8, 2, 5]
# 往后都是同样的道理,遇到大的,大的就往右移一个位置,遇到小的,就插在小的数的右边
[3, 4, 9,'|', 7, 6, 1, 8, 2, 5]
[3, 4, 7, 9,'|', 6, 1, 8, 2, 5]
[3, 4, 6, 7, 9, '|',1, 8, 2, 5]
[1, 3, 4, 6, 7, 9, '|',8, 2, 5]
[1, 3, 4, 6, 7, 8, 9, '|',2, 5]
[1, 2, 3, 4, 6, 7, 8, 9, '|',5]
[1, 2, 3, 4, 5, 6, 7, 8, 9,'|',]

代码如下:

def Insert_sort(list):for i in range(1,len(list)): # 趟数temp = list[i]  # 记录每趟无序区的第一个数j = i-1  # 有序区的最后一个数的下标while j >= 0 and list[j] > temp: # 控制是否移动list[j+1] = list[j]  # 把前一个数赋值给后一个j -= 1 list[j+1] = temp # 停下后把值插到小的数的右边return list
-----------------------------------------------
list3 = [9,4,3,7,6,1,8,2,5]
print(Insert_sort(list3))-------------->[1,2,3,4,5,6,7,8,9]
  1. 外层循环表示趟数,因为开始就设定列表第一个元素是有序区,其余为无序区,从无序区拿第一个元素与有序区逐个比较,所以趟数从1开始,

  2. 第三行:因为后续要将大的数向后移动一个位置,在实际代码中是把前一个数赋值给后一个数,我们需要一个变量来记录无序区的第一个数,防止被覆盖。

  3. 第四行:j 代表有序区的最后一个数的下标,因为比较大小是从有序区的末尾开始往前比较的:遇到大的,大的就往后移;遇到小的,temp就放在小的数的右边

  4. 第五行:这里有三种情况:

    1:有序区末尾的数比无序区第一个数还小,不用插;

    2:在中间时,停在小的数的右边

    3:当比较完整个有序区,如:j == 0时,list[j]还是比此时的list[i]还要大,那么还要执行一次 j-1 ,j == -1,因为列表没有list[-1]这个数,所以需要用 j >= 0来控制循环的结束

  5. 时间复杂度:O(n的平方)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/894806.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日报202535

今天总算是把项目组的事情解决了,于是正式开了Springboot+vue的学习,用了一晚上的时间配置好了环境(更新了JDK与Maven,重新设置了idea的设置) 然后了解了springboot的配置文件和基本使用,跑出了第一个spring的网页。这看着真有意思吧感觉比jsp方便不少。

Java SPI机制使用

1. Service Provider Interface SPI描述接口提供者优先规定接口要求,然后交由具体的实现者对接口进行内容的实现;2. 实现 //1. 定义接口 public Interface Demo_interface{//具体实现者必须要实现的内容void doexcute(); } //2.实现接口 public class Demo_Impl implements D…

互联网寒冬下,如何写好一份.NET求职简历?附带简洁免费的简历模板!!!

前言 在当今互联网行业的寒冬时期,每一位求职者都面临着更为激烈的竞争环境,如何在众多.NET候选人中脱颖而出,成为企业心仪的对象,用心准备一份简历显得尤为重要。简历不仅是个人职业经历的简要概述,更是向潜在雇主、HR展示你专业技能、项目经验、个人特质以及求职诚意的关…

注册github

今天成功注册了github账户,并上传了一个小项目。

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力,其中属性动画是整个动画体系的核…

C语言小记

int a =10; int b=3; int c= pow(10,3); //表示10的三次方unsigned 表示不用补码表示 //数字的输入,%d 包括 char,short,int%u unsigned%ld long long%lu unsigned long long输入 float 是 %f double 是 %lf shuchu dou shi %f保留小数的话是大于5才入,小于等于5舍去强…

系统流程图联系

练习题一:图书馆借阅管理系统流程图绘制 背景说明:在学校图书馆借阅管理系统中,学生借阅图书需要经过一系列流程。首先,学生携带校园卡前往借阅处,工作人员通过刷卡设备读取学生信息,系统验证学生身份是否有效。若身份无效,系统提示原因(如校园卡过期、欠费等)。若身份…

推荐4本专著《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》书,非常感谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…