插入排序(Java实现)

前言

    稳定性:如果一个排序是稳定的,是可以变成不稳定的,此时这个排序归结为稳定,但是如果这个排序本身是不稳定的,是不可以变成稳定的,此时这个排序是不稳定的。

    过程:如果数组中只有一个元素,这个数组当前就是有序的,当数组中有多个元素,要对其进行插入排序,此时就可以定义一个下标 i,来控制比较的元素,可以将 i 放到 tmp 中,然后 j 控制被比较的元素,一直比较的是 i 和 i 下标之前的所有的元素。

// 插入排序
    // 过程 arr[1]元素放到tmp中,j下标控制数组前边的元素去和tmp中的值去比较
    // 如果比 tmp 中的值大,此时让所有大的值往后挪动即可
    /* 时间复杂度:O(N ^ 2)  最好时间复杂度:O(N)(也就是当数据接近有序的时候排序速度非常快)
       所以一般的场景就是数据基本有序的时候就用 插入排序
    * */
    public void insertSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int tmp = arr[i];
            int j = i - 1;
            for (; j >= 0; j--) {
                if (tmp < arr[j]) {
                    arr[j + 1] = arr[j];
                } else {
                    arr[j + 1] = tmp;
                    break;
                }
                // 正常情况下,数组中最后一个元素是最小的,此时应该将这个元素放到最前边
                // 但是 j 下标是负数了,此时跳出循环了,所以就应该将tmp的最小值放到 j + 1 下标的位置上
                arr[j + 1] = tmp;
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

良月初十♧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值