所谓插入排序,就是将整个数组看成已排序好的部分,和未排序的部分,第一次的时候我们将数组额的第一个数看做已经排序好的序列,第一个数往后都是没有排序的序列,然后依次将没排序的数在已经排好序的系列中找到相应的位置上,使其再次成为排好序的序列,以此类推,直到为最后一个数找到相应的位置。
话不多说直接上代码:
插入排序算法有两种方式,第一种为交换插入法,第二种为移位插入法
我们先看第一种:(交换插入法)
public static void insertSort(int[] arr) {
// 第一个数视为已排好序列 从第二个数开始 找位置
for (int i = 1; i < arr.length; i++) {
// 保存变量
int j = i;
// 循环为要插入的数找到位置
while (j > 0) {
// 如果再循环的过程中 要插入的数小于前面的数 则交换
if (arr[j - 1] > arr[j]) {
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
// 改变位置继续
j--;
}
}
}
第二种方式(移动插入法)
public static void insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
// 设置变量保存要插入数的前一个数的位置
int j = i - 1;
// 保存要插入的数
int temp = arr[i];
// 循环找位置 当有一个数比要插入数大时 进入循环
while (j >= 0 && arr[j] > temp) {
// 将稍大的数 后移一位
arr[j + 1] = arr[j];
j--;
}
// 当退出循环时 j + 1 才是最终的位置
// 举一个例子便知道 当我们要插入的数 比前面任何数都要大时 我们就不用进入循环
// 此时j = i - 1 因为要执行下面这条语句 所以j + 1 才为正确的位置
arr[j + 1] = temp;
}
}
本次就到这里