package org.example.order;
import java.util.Arrays;
/**
* 插入排序实现
* 实现核心:将数组分为排序区和未排序区(排序区初始为首元素),从未排序区开始逐位与排序区比较大小(排序区从后至前),
* @author create by zhh
* @version v1.0
* @date 2021/4/13
*/
public class InsertionOrder {
public static void main(String[] args) {
int[] arr = new int[]{5,4,7,2,9,1,10};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
// 从1开始表示首位为排序区
// 每一次外层循环,表示排序区和未排序区的分界线向右移一位
for(int i = 1; i < arr.length; i++) {
// 取出未排序区的首位元素作为插入元素,用temp变量存储
int temp = arr[i];
int j = i - 1;
// 将temp与
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
// 下一个被比较元素的索引左移(这里将导致最后一次循环多移一位)
j--;
}
// 因为最后一次循环多做了一次j--操作,因此这里需索引加1做补偿
arr[j + 1] = temp;
}
System.out.println("排序后:");
System.out.println(Arrays.toString(arr));
}
}
执行结果
排序前:
[5, 4, 7, 2, 9, 1, 10]
排序后:
[1, 2, 4, 5, 7, 9, 10]