Java插入算法的基本思想与简单实现

Java 实现插入算法

思想

将一个数组分为两个部分:
排好的部分------>1
没有排好的部分------->2
将2的部分的第一个元素依次跟前面的每个数相比,遇到比其大的就继续向前比较;
直到遇到比他小的数,然后插入这个数的后面。

具体实现步骤

1.从第一个元素开始,将第一个元素看作是已经排好的数。
2.取出下一个元素,然后与前面排好的元素相比(从后向前依次比较)。
3.直到这个元素遇到比他小的元素。
4.将新元素插入到该元素的后面。
5.重复以上步骤。

请添加图片描述

实现代码

public class Insert {
    public static void main(String[] args) {
        int[] arr = {5,2,4,1,3,6,5,7,8,9};
        insert(arr);
//        System.out.println(Arrays.toString(arr));
    }

    public static void insert(int[] arr) {
        int j = 0;
        //循环的轮数  i=1没有必要和自己比
        for (int i = 1; i < arr.length; i++) {
            //拿出需要排序的元素
            int temp = arr[i];
            //j=i-1,将排好的控制在数组的左边
            /*
            1.判断条件arr[j]>temp 将需要排序的元素向前比较
            直到找到比这个数大的(因为i-1之前的元素我们是排好的)
            2.j>=0,当不满足这个条件时,说明这个数目前最小,需要排在第一个
             */
            //j--是为了向前扫描
            for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
                //将满足循环时,每比较一次就把该元素向后移动一位
                arr[j + 1] = arr[j];
            }
            //将需要插入的元素,插入数组中
            //j+1是因为,最后一次循环后(j--)多减了一次
            arr[j + 1] = temp;
            System.out.println("第"+i+"次循环后:"+Arrays.toString(arr));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值