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);
}
}
}
插入排序(Java版)
最新推荐文章于 2024-02-21 16:11:48 发布