面试之插入排序算法

Posted 每日一算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试之插入排序算法相关的知识,希望对你有一定的参考价值。

1
题目


通过代码实现插入算法。



2
解答


插入排序(Insertion sort)是一种简单直观且稳定排序算法


如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法。


插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。,


插入排序的思想和我们打扑克摸牌的时候一样,每次从牌堆里摸起出来的牌都是乱的,我们会把摸起来的牌插入到左手中合适的位置中,让左手中的牌时刻保持一个有序的状态。


插入排序总共有两个循环,外面的循环是对无序数组的循环,内层的循环是把当前取出的元素对已经排过序的数组的排序。


例如有一个如下的无序序列 {49,38,65,97,76,13,27},


我们依次从无序数组中获取元素(外循环)。


第一次取出第一个49,放在第一个位置。


49


第二次取出第二个数38,因为第二个数38小于第一个元素,通过内循环,把第一个元素往后移动一位,再把第二个元素38插入到第一个位置,结果这个排序好的数组变成了


38   49


第三次取出第三个数65,因为第三个数65比前面排好序的最大数49还要大,所以把65插在49的后面,也就是第三个位置,于是排好序的数组变成了


38   49   65


第四次取出第四个数97,因为第四个数97比前面排好序的最大数65还要大,所以把97插在65的后面,也就是第四个位置,于是排好序的数组变成了


38   49   65   97


第五次取出第五个数76,依次和已经排好序的数组进行比较,因为76比97小,所以97向后移动一位,然后76与65比较,因为76大于65,所以把76插入到当前的位置,也就是第四个位置,于是数组变成了


38   49   65   76   97


第六次取出第六个数13,依次和已经排好序的数组进行比较,因为13比97小,所以97向后移动一位,然后76与13比较,因为76大于13,所以76也向后移动一位,再次比较65和13,同理65大于13,所以65也向后移动一位,比较49与13,因为49大于13,所以49也向后移动一位,比较38与13,因为38大于13,所以38也向后移动一位,于是数组变成了


13   38   49   65   76   97


第七次取出第七个数27,依次和已经排好序的数组进行比较,和上面同样的比较方法,可得最后数组变成了


13   27   38   49   65   76   97


当外层循环完成,排序也就完成了。


讲了这么多,如果有错的话,记得指出哦,希望你们能够理解,好的话请关注一下吧~~~


3
代码




https://github.com/1260380285/suanfa/blob/yuanbing/src/com/test/ZhiJieCharu.java



你的关注是我最大的动力

如果你想要跟大家分享你的文章,欢迎留言投稿~

如果你喜欢,请留下你的赞哦


以上是关于面试之插入排序算法的主要内容,如果未能解决你的问题,请参考以下文章

面试之选择排序——数组下标越界了吗面试踩坑优化

面试之希尔排序——她也阔以优化!!!

《糊涂算法》之八大排序——插入排序

算法面试章-排序:彻底拿下插入排序和冒泡排序

手撕九大排序算法——面试必备!!!

遇到的面试题目之排序算法