插入排序

学习这些算法,不仅仅是要学习使用,更要学习的是其中的思想。

举例

那么说到插入排序,大家可以先想一下,生活中,什么地方会用到插入排序呢?我先来给大家举几个例子:

  • 上体育课,会要求按照大小个排队,此时如果大部分人已经排好了队,新来的人在插入式,一般使用的都是插入排序。
  • 我们给随机的扑克牌排顺序,也是使用插入排序。
  • 大家整理钱包的时候,是不是也会按照插入排序将钱按照大小顺序放起来。

思考

那么插入排序的中心思想是什么呢?
从无序到有序的这个过程,最重要的一个思想是什么呢?
是我们如何看待第一个待排序的元素,插入排序的中心思想,就是将第一个元素,此时它也是唯一一个元素,将它看待成一个有序序列。
一个也是有序的,如此,第二个元素,才可与之相比,并进行排序。

实例

既然了解了生活中的使用,那么我们也来看一下从代码层面,我们应该如何使用插入排序,咱们来看看代码如何实现。

public static void insertionSort(int[] arr){
    for(int i=1;i<arr.length;i++){
        int j=i;
        while(j>0 && arr[j] < arr[j - 1]){
            arr[j] = arr[j]+arr[j-1];
            arr[j-1] = arr[j]-arr[j-1];
            arr[j] = arr[j]-arr[j-1];
            j--;
        }
    }
}

假设我们现在有一个待排序数组,从第一个数字来说,假设它已经有序,然后开始给后面的数据排序。
直接插入排序的时间复杂度是O(N2)。假设我们有n个数,外层遍历一次需要O(n),内层需要遍历n-1次,所以它的时间复杂度是O(N2).

##后续
笑死,这篇博客写了好几年了,今天翻回来看这个例子,发现有一行写错了,果然是没人看,也没人发现,我自己偷偷改一下
2022.11.25

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

盖丽男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值