排序系列五----插入排序法

1.定义

      将无序序列中的各元素依次插入到已经有序的线性表中。

2.分析

      在线性表中,只包含第一个元素的子表显然是有序表。接下来从线性表的第二个元素开始直到最后一个元素,逐次将其中的每一个元素插入到前面的有序表中。一般来说,假设线性表中前j–1个元素已经有序,现在要将线性表中第j个元素插入到前面的有序子表中,插入过程如下:

      首先将第j个元素放到一个变量temp中,然后从有序子表的最后一个元素开始,往前逐个与temp比较,将大于temp的元素依次向后移动一个位置,直到遇到小于它的元素,此时就将temp插入到刚移出的空位置上。若temp的值大于等于子表的最后一个元素,则将temp直接插入到子表的第j个位置。此时,有序子表的长度就变为j了。

    当然,考虑到程序的空间成本,我们可以改进程序,以省去temp变量。

废话不多说,直接上图:

source code
running result
全部评论

相关推荐

HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
01-19 12:48
门头沟学院 C++
只想搞钱的鸽子很喜欢...:混账是很多的,还有那些在自己风华正茂的年纪说风凉话讥讽那些下岗前员工的。这些人都是现在职场环境这么烂的帮凶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务