1.原理分析
插入排序与打扑克牌是抓牌放位置的原理类似
2. 算法步骤
把第一个元素看成一部分(左),把第二到最后看成一部分(右),
每次拿第二部分中的第一个去和第一部分比较排序(如果待插入的元素(右)与有序序列中的某个元素(左)相等,则将待插入元素插入到相等元素的后面。)
3.核心重点
先把当前要比较的数拿出来,用一个变量(current = i)存放,以便后续比较。如果前一个下标(preIndex = i-1)>=0(即拿出来的数要是第二个及以后的),并且这个数比前一个数(preIndex = i-1)小,则进行交换
4.动态原理图
4.代码演示
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) {
int[] array = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
//3.插入排序
System.out.println("排序前:" + Arrays.toString(array));
insertionSort(array);
System.out.println("排序后:" + Arrays.toString(array));
}
//3.插入排序
public static void insertionSort(int[] array){
int current;//定义一个存放当前要比较元素的容器
//从第二个元素开始遍历,到最后一个
for (int i = 1; i < array.length; i++) {
current = array[i];//把右边部分的第一个元素赋值给容器
int preIndex = i-1;//定义变量存放 容器的前一个元素下标
//进行判断比较 当取出的这个数前面还有元素时,并且取出的这个数比前一个数小 时
while(preIndex >=0 && current < array[preIndex]){
//将前一个数往后移一位,当前这个下标往前移一位
array[preIndex +1]=array[preIndex];
preIndex --;
}
//一趟比完,得到遇到比current大的数,停止遍历,进行交换,把current这个值赋给preIndex +1 的位置,因为上一堂比完preIndex--了,位置往前了一个。
array[preIndex+1]=current;
}
}
}