一、文字描述
a、
初始数组的元素若为: 43,17,36,15,69, 40
排序规则:假设为升序排列;
开始阶段:从第二个数字17开始,只需判断17是否在正确的位置;
比较阶段:将17和其左边的数字比较,即比较17和43,结果17比43小;
操作阶段:交换17和43的位置,结束
第一次排序后:17, 43, 36, 15, 69, 40
b、
初始数组元素为: 17, 43, 36, 15, 69, 40
排序规则:假设为升序排列;
开始阶段:从第三个数字36开始,只需判断36是否在正确的位置;
比较与操作阶段:将36和其左边的数字比较,即比较36和43,结果36比43小,交换36和43的位置,此时原序列变为 17, 36, 43, 15, 69, 40 ,36继续与左边的数字17比较,结果36比17大,无需移位,结束
第二次排序后: 17, 36, 43, 15, 69, 40
c、
初始数组元素为: 17, 36, 43, 15, 69, 40
排序规则:假设为升序排列;
开始阶段:从第四个数字15开始,只需判断15是否在正确的位置;
比较与操作阶段:将15和其左边数字比较,即比较15和43,结果15比43小,交换15和43的位置,此时原序列变为 17, 36, 15,43, 69, 40 ,15继续与左边的数字36比较,结果15比36小,交换15和36的位置,15继续与左边的数字17比较,结果15比17小,交换两者位置,此时15在序列最左侧,比较结束
第三次排序后: 15, 17, 36, 43, 69, 40
d、
按上边的操作继续,最后可得出排序的最终结果为15,17,36,40,43,69
二、代码实现
public class Insert_sort {
public static void main(String[] args) {
int[] num = new int[]{43, 17, 36, 15, 69, 40};
System.out.print("原序列:");
for (int i : num) {
System.out.print(i + " ");
}
insertSort(num);
System.out.println("\n------------------------------");
System.out.print("排序后:");
for (int i : num) {
System.out.print(i + " ");
}
}
public static void insertSort(int[] num) {
//比较点(充当大小比较的值)(或称需插入的元素)
int insert;
//外层for循环表示比较点的更替操作
//从第二个元素开始比较,比较对象的位置将始终位于比较点的左边
for (int i = 1; i < num.length; i++) {
//比较点赋值,经过外层for循环,比较点依次后移,直至数组末尾
insert = num[i];
//j为比较对象,将始终位于比较点的左边一个位置
int j = i -1;
//内层while循环表示元素比较与元素移位的操作
//当前比较点与其左边一个位置的元素进行大小比较
while(j >= 0 && insert < num[j]) {
//若比较点的值小于其左边一个元素,则将值较大的元素(即比较点左边一个元素)后移
num[j + 1] = num[j];
//比较点依次与其左边的元素进行比较,直至与第一个元素比较或左边的序列符合排序规则而无需移位操作时结束
j--;
}
//当前比较点的值大于其左边一个元素,符合升序排列规则,无需元素移位,直接将当前比较点插入数组
num[j + 1] = insert;
}
}
}
控制台,程序运行结果: