简单易懂_插入排序

插入排序

描述

插入排序就是给每一个数据找到相对应的位置并插进去 说的些许抽象, 记住这个“插入”圈起来要考。举个栗子 当数组遍历到第二个数据(数据2)时 首先会让数据2和在他前面的数据1 进行比较 如果数据1比较大 就会把数据2“插入”到数据1 前面。反之则一动不动。 遍历到数据3 时 首先会让数据3和在它前面的数据2 作比较 如果数据3 比数据2 大 则一动不动 反之 插入到数据2前面继续跟数据1比较 依次类推 当我们遍历完最后一个数据时 我们就可以得到一个有序数组(集合)了

图片加深理解(来源参考资料)
在这里插入图片描述

代码实现

public class InsertSort {
    public static void main(String[] args){

        int[] arr = {3,2,5,6,7,1,4};
        insertSort(arr);
    }
    public static void insertSort(int[] arr){
        for (int i = 1; i < arr.length ; i++) {
            int insertVal = arr[i];
            int insertIndex = i - 1;
            //给insertVal找到要插入的位置
            // insertIndex >= 0 保证在给insertVal找插入位置 不越界
            // insertVal < arr[insertIndex] 待插入的值还没有找到插入位置 就需要将arr[insertIndex]后移
            while (insertIndex >= 0 && insertVal < arr[insertIndex]){
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex--;
            }

            arr[insertIndex + 1] = insertVal;

        }
        System.out.println(Arrays.toString(arr));
    }

复杂度

时间复杂度: O(N^2)
空间复杂度: O(1)
如果数据量在比较大的情况下使用插入排序的话 时间相对会比较久 但是相对于冒泡排序效率会有些许提升 因为插入排序存在一个情况 当前要进行排序的数据 比前一个数据大 就不会继续互相比较的代码 这里就会有一个性能上的提升。

参考资料

参考地址目的地
https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715

秃头萌新一枚 照顾不周 请多关照

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值