【每天学一点 - 算法篇 - 排序 - 插入排序】

系列文章目录

【每天学一点 - 算法篇 - 排序 - 插入排序】


前言

想写点文章又不知道写什么,那就从今天开始先每天记录一点自己的学习内容吧


一、为什么学算法要从排序开始?

之前也在力扣上刷题,每天做一道或难或简单的每日一练,也就当自己每天都很充实。
不过说来惭愧,前段时间常常加班,回家之后实在也没心思再刷题了,
最近项目上线,又恢复闲散状态,忽然想总结下之前做题的通性,
就忽然觉得排序就是算法啊,排序就是最基础又是最经典的算法,翻出我珍藏多年的数据结构与算法,打开算法章节第一章果然就是排序。
恍然大悟,对啊,排序就是最基础最重要的算法,排序于算法来说就像for/if对于编程一样重要。
果然学算法第一步一定要从排序开始

二、排序算法 - 插入排序原理

1.思路

我感觉插入排序算是最贴合人类排序思维的排序方式了。
因为对于我来说插入排序最简单的理解就是打扑克,
我不知道大家打扑克是怎么整理手牌,
我反正就是从左到右一次看应该放在什么位置合适。

2.示例

比如第二张牌有没有比第一张大,大就放第一张右边,小就放第一张左边,这两张就是顺序的队列了;
然后抽出第三张跟前两张比,放在合适的位置,让这三张可以顺序排列,这三张就是顺序的队列了;
然后最后一张牌抽出来,从我已经整理好的牌从右往左依次比,一直到刚好大于左边,小于右边,然后插进去
图示

3.抽象

抽象下就是,
第一个数字默认为已经排序好的有序数组,
从第二个数字开始排序,这个数现在在有序数组的最右侧,
然后跟有序数组中最大数(右边第一个)比较,如果比最大数还要大,那么这个数位置不动,即有序数组在最右侧加上这个数还是有序数组,
否则他比最大数小,就要跟最大数换位置,
然后依次向左跟第二大的数比较并换位置,第三大的数比较并换位置,,,
直到比下一个数大或左边没有下一个数,那就不动了,
即比左边的数大,比右边的数(上一次交换中因为大被换到右边)小,那有序数组就又恢复有序了。
然后后面每一个数分别按照上面的方法逐个插入有序数组中,最后就是一整个的有序数组了。

三、排序算法 - 插入排序代码实现

代码如下:

public int[] insertionSort(int[] a) {
        for (int i = 1; i < a.length; i++) {
            int check = a[i];
            int j;
            for (j = i; j > 0 && check < a[j - 1]; j--) {
                a[j] = a[j - 1];
            }
            a[j] = check;
        }
        return a;
    }

总结

第一次正经想写个文章,想从简单的开始,结果写个插入排序一通查资料,稀碎,原理解释的自己都不知道在说啥,算了第一天写,只要能坚持下去就原谅自己了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破晓星芒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值