将一个数插入一个已经排好序的数据中,比如下面这张图
每一次待排序元素都跟前面以排号元素进比较,如果待排序元素小于比对元素,则交换位置
先定义一个int类型的倒序数组和用于元素交换的temp
int[] arr = new int[]{9,8,7,6,5,4,3,2,1};
int temp = 0;
第一层for循环
//循环遍历数组
for (int i = 1; i < arr.length; i++) {
//将待排序元素赋值给temp
int value = arr[i];
//此 j 用于第二层for循环
int j = 0;
}
第二层for循环
//因为是从后往前比对,所以j--
for (j = i - 1; j >= 0; j--) {
//比较待排序值和前面已排好序的元素
if (arr[j] > value) {
//将大于待排序的值往前移一位
arr[j + 1] = arr[j]; // 数据移动
} else {
//如果条件不成立,则终止循环,执行循环外的代码
break;
}
}
二层循环结束,将待排序的值插入
arr[j + 1] = value; // 插入数据
遍历数组
for (int s : arr) {
System.out.print(s + "\t");
}
结果
1 2 3 4 5 6 7 8 9
源代码
public static void main(String[] args) {
int[] arr = new int[]{9,8,7,6,5,4,3,2,1};
int temp = 0;
for (int i = 1; i < arr.length; i++) {
int value = arr[i];
int j = 0;
for (j = i - 1; j >= 0; j--) {
if (arr[j] > value) {
arr[j + 1] = arr[j];
} else {
break;
}
}
arr[j + 1] = value;
}
for (int s : arr) {
System.out.print(s + "\t");
}
}