Java排序算法之插入排序(图文描述)

一、文字描述

a、
初始数组的元素若为: 43,17,36,15,69, 40
排序规则:假设为升序排列;
开始阶段:从第二个数字17开始,只需判断17是否在正确的位置;
比较阶段:将17和其左边的数字比较,即比较1743,结果1743小;
操作阶段:交换1743的位置,结束
第一次排序后:17, 43, 36, 15, 69, 40
b、
初始数组元素为: 17, 43, 36, 15, 69, 40
排序规则:假设为升序排列;
开始阶段:从第三个数字36开始,只需判断36是否在正确的位置;
比较与操作阶段:将36和其左边的数字比较,即比较3643,结果3643小,交换3643的位置,此时原序列变为 17, 36, 43, 15, 69, 40 ,36继续与左边的数字17比较,结果3617大,无需移位,结束
第二次排序后: 17, 36, 43, 15, 69, 40
c、
初始数组元素为: 17, 36, 43, 15, 69, 40
排序规则:假设为升序排列;
开始阶段:从第四个数字15开始,只需判断15是否在正确的位置;
比较与操作阶段:将15和其左边数字比较,即比较1543,结果1543小,交换1543的位置,此时原序列变为 17, 36, 1543, 69, 40 ,15继续与左边的数字36比较,结果1536小,交换1536的位置,15继续与左边的数字17比较,结果1517小,交换两者位置,此时15在序列最左侧,比较结束
第三次排序后: 15, 17, 36, 43, 69, 40
d、
按上边的操作继续,最后可得出排序的最终结果为151736404369

二、代码实现

public class Insert_sort {
    public static void main(String[] args) {
        int[] num = new int[]{43, 17, 36, 15, 69, 40};
        System.out.print("原序列:");
        for (int i : num) {
            System.out.print(i + " ");
        }
        insertSort(num);
        System.out.println("\n------------------------------");
        System.out.print("排序后:");
        for (int i : num) {
            System.out.print(i + " ");
        }
    }

    public static void insertSort(int[] num) {
        //比较点(充当大小比较的值)(或称需插入的元素)
        int insert;
        //外层for循环表示比较点的更替操作
        //从第二个元素开始比较,比较对象的位置将始终位于比较点的左边
        for (int i = 1; i < num.length; i++) {
            //比较点赋值,经过外层for循环,比较点依次后移,直至数组末尾
            insert = num[i];
            //j为比较对象,将始终位于比较点的左边一个位置
            int j = i -1;
            //内层while循环表示元素比较与元素移位的操作
            //当前比较点与其左边一个位置的元素进行大小比较
            while(j >= 0 && insert < num[j]) {
                //若比较点的值小于其左边一个元素,则将值较大的元素(即比较点左边一个元素)后移
                num[j + 1] = num[j];
                //比较点依次与其左边的元素进行比较,直至与第一个元素比较或左边的序列符合排序规则而无需移位操作时结束
                j--;
            }
            //当前比较点的值大于其左边一个元素,符合升序排列规则,无需元素移位,直接将当前比较点插入数组
            num[j + 1] = insert;
        }
    }
}

控制台,程序运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值