插入排序 InsertSort 20220127

插入排序

思路:
    从第二个元素开始遍历,如果当前元素比其前一个元素小,那么前一个元素后移一位,
    此时空出一个位置,再往前比较,如果比当前元素大,那么空出的位置就是当前元素要插入的位置,
    否则将与当前元素比较的元素后移一位,也就是空出的位置又向前移动一位,以此类推,
    当满足条件时,就将当前元素插入到空出的位置中。

     1 9 6 2 4 3
     1 9  (9>1则继续下一循环,也就是6)
     1   9(6<9,所以将9后移一位,空出一个位置)
     1   9(6>1,所以空出的位置插入6)
     1 6 9(继续下一次循环,也就是2)
     1 6   9(2<9,所以9后移一位,空出一个位置,继续,判断空出的位置是不是插入2)
     1   6 9(2<6,所以6也要后移一位)
     1 2 6 9(2>1,所以当前空出的位置就是2的目的地)
     ..........

public static void insertSort(int[] array){
        //1.记录当前元素,因为前面元素后移会覆盖它
        int insertNode;
        // 记录要与当前元素进行比较的元素位置,初始值为当前元素所在位置的前一个位置,然后依次j--往前找
        // 直到j所指向元素<当前元素
        int j;
        for (int i = 1; i < array.length; i++) {
            insertNode=array[i];
            j=i-1;
            //如果要插入的元素小于第j个元素,就将第j个元素向后移动
            while (j>=0&&insertNode<array[j]){
                array[j+1]=array[j];
                j--;
            }
            //while每循环一次,j减一,当while不满足条件时,j指向的是空位置的前一个元素
            array[j+1]=insertNode;
        }
    }
    public static void main(String[] args) {
        int[]array =new int[10];
        for (int i = 0; i < array.length; i++) {
            array[i]=(int)(Math.random()*100);
            System.out.print(array[i]+",");
        }
        insertSort(array);
        System.out.println();
        for (int num:array){
            System.out.print(num+",");
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值