插入排序(Java版)

package algorithm.sort;

import cn.hutool.core.lang.Console;

/**
 * @author shenwei.
初始数组数据:	[-10, -23, 50, 25, 33, 85, -45, 66, 500, 489]
第1步排序结果:	[-23, -10, 50, 25, 33, 85, -45, 66, 500, 489]
第2步排序结果:	[-23, -10, 50, 25, 33, 85, -45, 66, 500, 489]
第3步排序结果:	[-23, -10, 25, 50, 33, 85, -45, 66, 500, 489]
第4步排序结果:	[-23, -10, 25, 33, 50, 85, -45, 66, 500, 489]
第5步排序结果:	[-23, -10, 25, 33, 50, 85, -45, 66, 500, 489]
第6步排序结果:	[-45, -23, -10, 25, 33, 50, 85, 66, 500, 489]
第7步排序结果:	[-45, -23, -10, 25, 33, 50, 66, 85, 500, 489]
第8步排序结果:	[-45, -23, -10, 25, 33, 50, 66, 85, 500, 489]
第9步排序结果:	[-45, -23, -10, 25, 33, 50, 66, 85, 489, 500]
 */
public class InsertionSort {

    public static void main(String[] args) {

        //定义一个数组
        int[] values = {-10, -23, 50, 25, 33, 85, -45, 66, 500, 489};

        //输出未经排序原始数组
        Console.log("初始数组数据:\t{}\n", (Object) values);

        /*
         *  从无序列表数组的第二个元素开始循环将数组中的元素插入
         */
        for (int original = 1; original < values.length; original ++) {

            // 设置数组中的第2个元素开始,也就是当前循环的元素
            int insert = values[original];

            //设置front为当前前一个元素
            int front = original - 1;

            /*
             *  front大于0 表示循环比较到原始数组前面没有元素的时候就停止循环
             *  即形成当前循环的左边有序列表
             * 当前循环数insert小于前一个元素
             */
            while (front >= 0 && insert < values[front]) {

                //就将前一个元素values[front]向后移动
                values[front + 1] = values[front];

                //从当前循环数insert 与前元素values[front]进行循环比较 此循环比较为从右往左的顺序 故做 递减-1操作
                front --;

            }

            // 直到要插入的元素insert不小于第j个元素,将insert插入到数组values[front +1]中
            values[front + 1] = insert;
            Console.log("第{}步排序结果:\t{}", original, values);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ProgramZen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值