插入排序相对于冒泡和选择来说难度大一些,速度比冒泡排序快,比选择排序略微快一些。同时插入排序的写法也多种多样,这里小编采用的是先找到要插入的地方,然后记录,记录好之后,把要移动的地方先整体移动,最后在插入的方式。
@Test
public void sort3() {//插入排序
int[] arr = new int[]{1, 6, 4, 2, 5, -2};
int temp = 0;//用来记录当前数字的值
int index = 0;
boolean isalg = false;//作为一个开关
for (int i = 0; i < arr.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (arr[i] > arr[j]) {//当前数字与前面作比较,一旦比前面的数字大了,即可跳出循环
break;
}
if (arr[i] < arr[j]) {
index = j;//如果当前数字比前一位数字小,记录此时与当前数字做比较的下标
isalg = true;//打开开关
}
}
temp = arr[i];//记录下当前数字
if (isalg) {
for (int k = i; k > index; k--) {
arr[k] = arr[k - 1];//把最后一位与当前数字比较的数以此往后移
isalg = false;//关闭开关
}
arr[index] = temp;//将当前数字插入到最后以此比较比它大的地方
}
System.out.println("第" + (i + 1) + "轮" + Arrays.toString(arr));
}
System.out.println(Arrays.toString(arr));
}
|