1. 基本介绍
(1)插入排序属于内部排序法,是对于待排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。
(2)基本思想:把n个待排序的元素看作一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
2. 代码实现
/**
* 插入排序
* @param arr 待排序的数组
*/
public static void insertSort(int[] arr) {
//遍历原数组剩下的元素
for (int i = 1; i < arr.length; i++) {
//待插入的值
int insertVal = arr[i];
//当前元素前一个元素的下标
int insetIndex = i - 1;
//遍历前面的元素,找到插入位置
//如果下标没有越界,并且待插入元素小于前一个元素
while (insetIndex >= 0 && insertVal < arr[insetIndex]) {
//将前一个元素后移一位
arr[insetIndex + 1] = arr[insetIndex];
//下标前移一位
insetIndex--;
}
//如果当前元素大于前面的所有元素,就不需要插入
if (insetIndex + 1 != i) {
//当前元素的位置就是插入的位置
arr[insetIndex + 1] = insertVal;
}
}
}