首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么这段插入排序的代码不能工作?

插入排序是一种简单直观的排序算法,它的基本思想是将一个记录插入到已经排好序的有序序列中,从而得到一个新的、记录数增加1的有序序列。下面是一个示例的插入排序代码:

代码语言:txt
复制
def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key

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

这段代码的问题可能出现在以下几个方面:

  1. 变量命名错误:请确保变量名的拼写和使用是正确的,例如arr代表待排序的数组,key代表当前要插入的元素。
  2. 数组越界:在插入排序的内部循环中,需要确保j的值不会小于0,同时需要通过arr[j]来访问数组元素。请检查数组的索引是否正确,以及是否正确使用了j来访问数组元素。
  3. 循环条件错误:在内部循环中,需要判断arr[j]是否大于key,如果是,则将arr[j]后移一位。请确保循环条件的判断是正确的,以及是否正确地将元素后移。
  4. 排序结果错误:最后,需要确保排序结果是正确的。可以通过打印排序后的数组来验证排序算法的正确性。

综上所述,以上是一些可能导致插入排序代码不能工作的常见问题。如果你能提供具体的错误信息或代码示例,我可以更具体地帮助你找出问题所在。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么这段代码输出是”Hello World”

Stackoverlfow.com上有一篇有趣讨论帖: 在这篇帖子里提到了如下程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出结果都是Hello world...首先看一下这个程序工作原理: 通过这句命令首先得到六个数是: 8 5 12 12 15 0 然后,通过new Random(-147909649).nextInt(27)得到6个数是: 23 15...使用同样种子实例化Random对象,每次运行时将会遵循同一种模式,产生同样序列。”...这就是为什么每次运行该程序都会产生同样结果原理啦~ 当然,关于这个话题,高手林立Stackoverflow上是不缺乏懂行专家和见解。...尤其是在复杂计算环境下高质量随机数产生,需要牵涉到非常高深计算科学和数学方面的理论研究。 在计算机随机数产生理论研究上,美籍华人姚期智(目前任职于清华大学)是世界顶尖专家。

94820

为什么这段代码输出是”Hello World”

Stackoverlfow.com上有一篇有趣讨论帖: 在这篇帖子里提到了如下程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出结果都是Hello world...首先看一下这个程序工作原理: 通过这句命令首先得到六个数是: 8 5 12 12 15 0 然后,通过new Random(-147909649).nextInt(27)得到6个数是: 23 15...使用同样种子实例化Random对象,每次运行时将会遵循同一种模式,产生同样序列。”...这就是为什么每次运行该程序都会产生同样结果原理啦~ 当然,关于这个话题,高手林立Stackoverflow上是不缺乏懂行专家和见解。...尤其是在复杂计算环境下高质量随机数产生,需要牵涉到非常高深计算科学和数学方面的理论研究。 在计算机随机数产生理论研究上,美籍华人姚期智(目前任职于清华大学)是世界顶尖专家。

97320

代码审查|这段代码为什么复制文件夹总是“成功”?

最近开始一个人负责整个项目的全栈开发和维护,工作中没了和同事交叉 code review 环节,所以就打算,如果工作中遇到一些比较典型代码,包括好味道和坏味道,就拿出来分析下,与大家一起交流,作为另一种形式...这天遇到这样一个问题:在 Android 手机上复制 assets 里文件夹到手机里,实际并没有拷贝完成,但代码总是显示成功,看了下代码,使用是阿里云播放器 Android SDK Demo 里一个工具类...工具类里相关代码经过简化后示意如下: public class Commen { private static Commen instance; private volatile boolean...isSuccess = true; } catch (Exception e) { isSuccess = false; } } } 这段代码使用起来若不谨慎...如果由我来写这段代码,我会做这样修改: 将类改为工具类,公开方法都是静态方法,不需要单例控制; 方法执行是否成功,由返回值、是否抛出异常来表示,不使用成员变量记录; 拷贝过程中,记录拷贝成功文件列表

10310

为什么学了那么多门语言,我还是编不好这段代码

对于工程师来说,学习第一门编程语言只是万里长征第一步,只要你还在这个领域,就不可能只学一种语言,只会一种语言工程师根本就不能称之为工程师。...2 如果你不能用一种编程语言基本特性写出好代码,那换成另外一种语言也无济于事,你会写出同样差代码。比如,你 Java 代码写得很糟糕,那么换成 Go、Ruby,你代码也会一样糟糕,甚至更差。...平时工作中我对 Ruby、Python、C++、和 Java 熟练程度差不多,但是面试中使用 Ruby 或者 Python 答题,写代码时间估计是那两者一半。...如果你平时编程工作涉及到业务功能,而不是纯粹技术架构,一定会使用到数据库。SQL 就是数据语言,通过它你可以和数据建立连接和沟通。...7 最后,也是最重要是:在任何时候都要用并发、分布式思维去看待你程序。因为竞争条件或者并发中不确定因素(比如调用顺序)导致 Bug,仅仅理解语言基本特性,根本不能解释。

33710

我说我为什么抽不到SSR,原来是这段代码在作祟...

我说我为什么抽不到SSR,原来是加权随机算法在作祟 ★阅读本文需要做好心理准备,建议带着深究到底决心和毅力进行学习! ” 灵魂拷问 为什么有 50% 几率获得金币?...为什么有 40% 几率获得钻石? 为什么只有 9% 几率获得装备? 为什么才有 1% 几率获得极品装备? 是人性扭曲,还是道德沦丧,请和我一起走进今日说法 !...先别急往下看,你能想到更好办法吗? 方案二、略显聪明 由于总权重为 15(1+2+4+8),我们可以生成一个 [0,15) 随机整数,然后根据这个数字返回索引。代码如下。...优化源码中二分法。 轮盘赌算法,每次都去赌。 内联:编译器一个名词。我们代码最终都是经过编译系统转换成可执行二进制文件。汇编阶段读取是词法、语法单元输出结果。...而内联是编译器对词法、语法分析器对源代码做出分析,然后产生二进制代码这个过程叫内联。 源代码 https://github.com/guowei-gong/weighted-random

1.3K20

你能发现这段 Python 代码 bug 吗?

在我看来,分析工作可分为三步: 循环读取每一行数据; 利用逗号将数据分解成一个列表; 选取第一个和第三个元素,并将它们转换为整数。...看似很简单,我可以使用 pandas DataFrame 编写几行代码就够了。 下面是我编写代码: 你发现 bug 了吗?反正我没看出来。...下面,我来详细解释一下这段代码,并深入剖析我究竟错在哪儿了。 代码详解 CSV文件是列表列表 我简单地认为,CSV 数据就是列表列表。因此,我可以将各个元素视为嵌入列表。...这个嵌套列表会生成以下字节码: 然后,我一些自己代码进行扩展,最终得到了以下代码: 错误 事实证明,Python 无法按照我想象将可迭代文本分解与推导式结合起来,你必须把 .split(",...下图展示了正确生成器表达式与我编写代码之间差异: 你看出问题所在了吗?代码问题在于,在分解文本之前,.split() 返回值是迭代器。

11930

为什么程序员代码不能终生责任制?

前言 知乎上有一个提问:为什么程序员代码不能终生责任制? ↓↓↓ 今天,我们就这个话题,一起来做个讨论。...我们知道,诸如桥梁建造、商品房新建,这种民生建筑等建完房子之后,施工单位和相应工程师,是需要对其质量负一定责任,甚至可以说这种责任是终身制。...小伙伴们不妨先想一想,然后把你们答案,写在评论区。 我回答 现在,据我多年观察现象来看,只要我们不从事非法软件研发工作,比如赌博、早期P2P金融类软件等等。...一些合理、合法软件,一般开发同学,出问题是不需要付什么法律责任,特别是离职后同学。...至于,为什么程序员不需要像建筑工程师那样,对工程质量付终身责任制这个问题,大家不妨发表一下你灼见,在评论区,与我们小伙伴一起讨论。

26030

这段代码很Pythonic | 相见恨晚 itertools 库

很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic代码在执行上也更有效率。今天就先给大家介绍一下Python系统库itertools。...3中map,filter等操作返回不再是列表而是迭代器。...话虽这么说但大家平时用到迭代器大概只有range了,而通过iter函数把列表对象转化为迭代器对象又有点多此一举,这时候我们今天主角itertools就该上场了。...使用itertools itertools中函数大多是返回各种迭代器对象,其中很多函数作用我们平时要写很多代码才能达到,而在运行效率上反而更低,毕竟人家是系统库。...,最终达到随手拈来程度,装逼说就是由术入道。

54930

谷歌工程师写这段代码什么水平?

源 / 菜鸟教程 代码,正在改变世界。正是因为有了代码存在,才有了阿里巴巴、百度、京东、天猫等存在。 有网友分享了一篇名为 “看看牛B程序员是如何写好看代码文章。...整篇文章只有放了一段代码,而且这段代码据说是前谷歌工程师写,大家快来看看什么水平? ? 在这段代码下面,很多网友跟帖,下面精选一些网友回答: 网友一:不是说不要嵌套太多if么?...网友六:我觉得这个问题得看看这段代码解决是什么问题,然后我们再基于这个问题考虑,就会体会到这段代码厉害之处了,相同之处参见刷算法题时费尽千辛万苦解决了一个问题,看答案排行,发现第一名代码量能只有自己十分之一运算性能还强令人发指...看来大家对谷歌前程序员写代码,不是很满意,认为问题很多。其实不一定大牛写代码就很牛逼,有些时候,也会出现一些小问题。曾经因为一行代码错误,日本价值18亿卫星就失控了。...因为一行代码错误,“瞳”卫星成为科学界悲剧。 代码可以改变世界,也可以毁灭世界,程序员就是这样一群牛逼存在。上面谷歌程序员写那段代码,你觉得水平怎样,可以在下面留言!

55430

这段代码很Pythonic | 相见恨晚 itertools 库

很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic代码在执行上也更有效率。今天就先给大家介绍一下Python系统库itertools。...3中map,filter等操作返回不再是列表而是迭代器。...话虽这么说但大家平时用到迭代器大概只有range了,而通过iter函数把列表对象转化为迭代器对象又有点多此一举,这时候我们今天主角itertools就该上场了。...使用itertools itertools中函数大多是返回各种迭代器对象,其中很多函数作用我们平时要写很多代码才能达到,而在运行效率上反而更低,毕竟人家是系统库。...,最终达到随手拈来程度,装逼说就是由术入道。

56930

你能发现这段 Python 代码 bug 吗?

在我看来,分析工作可分为三步:循环读取每一行数据;利用逗号将数据分解成一个列表;选取第一个和第三个元素,并将它们转换为整数。...看似很简单,我可以使用 pandas DataFrame 编写几行代码就够了。下面是我编写代码:你发现 bug 了吗?反正我没看出来。下面,我来详细解释一下这段代码,并深入剖析我究竟错在哪儿了。...代码详解CSV文件是列表列表我简单地认为,CSV 数据就是列表列表。因此,我可以将各个元素视为嵌入列表。...这个嵌套列表会生成以下字节码:然后,我一些自己代码进行扩展,最终得到了以下代码:错误事实证明,Python 无法按照我想象将可迭代文本分解与推导式结合起来,你必须把 .split(",") 调用放在另一个列表中...下图展示了正确生成器表达式与我编写代码之间差异:你看出问题所在了吗?代码问题在于,在分解文本之前,.split() 返回值是迭代器。

19120

我在阿里工作这段时间里,都学到了哪些东西

来阿里也已经四个多月了,这段时间你学了很多东西,简单说起来,就是一个走出舒适区过程,从一开始新手入门,到逐渐熟悉业务和技术,再到慢慢适应环境,胜任工作。...,都会在日常工作中使用到,所以在技术上成长,主要还是体现在平时日常工作。...在没有正式工作之前,我对职场理解还停留在实习阶段,实习相对正式工作来说,比较轻松,生活和工作压力也没那么大,所以可能在实习阶段也比较散漫,没有特别努力认真,现在想想还真应该反思一下实习时候状态,...到了工作时候就不一样了,你必须要胜任工作,必须要把每件事情做好。...,关键时刻需要你时候绝不能掉链子。

36740

人心易变,这段有趣C代码也一样!!!

C语言中volatile关键字也许大部分人都听过,但实际用过的人可能不多,它字面意思是“易变”。...今天我们题目就跟它有关,这也是一道比较著名和经典面试题,不同公司对它进行过多次考察,代码如下: int square(volatile int *p){ return(*p)*(*p); }...函数意思大家都明白,就是计算整数平方,就问上面的代码有没有问题?...回到本题,如果说编译器在编译上述代码时,把它等价为如下: int square(volatile int *p){ int a=*p; int b=*p; return a*b; } 由于volatile...如下: int square(volatile int *p){ int a=*p; return a*a; } 从今天这道经典面试题可以看出,面对一些比较少用关键字,绝对不能掉以轻心,而对于编译器自动优化问题

50210

每次不能工作干好时候,就看看

在你做出决定前还是先看看自己能不能当好程序员吧。可是什么样的人不适合当程序员呢?不要喝鸡汤,我们看看 Quora 上面是如何回答。...精力:处理棘手问题,编写大量代码容易使得身心俱疲。最重要是要有我朋友 Joshua Wachs 所谓 “坐能量(tushie power)”。也就是屁股不离座直到工作完成能力。...一般程序员在碰到棘手问题时候一般是靠猜来解决。运气好可能猜得中。但运气不好就难搞了。问题是猜并不能有效缩小可能原因范围。好程序员会提出猜想然后进行测试,从而排除掉一堆可能性。...不平庸程序员连续 22 小时冲刺以后才能打个盹隔 4 天才洗次澡并在接下来 2 周时间里每天要用 2 小时写一些报告。不能或者不愿在必要时加班的人最好打住。...我喜欢 Peter Nierop 回答,不过说到正式付费工作,我本人总是严格遵守朝九晚五习惯,所以那个说法应该看工作情况而定。 如果你发现编程很乏味,学习又总是繁琐无趣的话,那你想做好就很难了。

67440

为什么不能照搬以前成功经验?

导语 之前提到,笔者刚换了一家公司,说一下笔者在开展工作过程中遇到一些问题。 先介绍一下公司现在情况。...现在不管领导怎么催,质量故障或不能满足客户要求情况还是出现越来越频繁。也正是因为这个样子,领导也开始召开专题会议,讨论怎么解决这个问题。...但在工作中,一旦测试周期紧张了,就会有一部分测试人员会想,能不能不写计划,本来测试时间就紧张了,还要花那么多时间在计划上,值得吗?对质量提高有帮助吗?...以我面临情况为例,会有员工觉得,我们现在迭代这么频繁,可以认为是敏捷开发了。既然敏捷开发不重文档,我们就不写了吧。 说说我看法: 做工作要多问思考,多问为什么,比如我们是敏捷开发吗?...测试和开发区别只是负责编写测试代码和负责编写代码,从难度上讲没有区别。甚至从思考程度上,编写测试代码要想得更多。

75060
领券