插入排序
思路
- 一共遍历length-1趟数组
- 假设一个有序表,先将数组的第一个值放入有序表
- 将该趟遍历的数组的第一个数和有序表中的数,从有序表的最后一个数开始,依次比较,找到该数在有序表相应的位置,将其插入该位置
- 如果该数比有序表中的数都小,则其位置为有序表的第一个位置,有序表的最后一个数放入该数位置,前面的数依次往后推,结束条件为下标等于-1,最后将该数放入有序表的第一个位置
- 如果该数不是最小,当遇到比其小的数,循环结束,最后将该数放入有序表相应的第一个位置
代码
public static void insertSort(int[] arr) {
int insertVal = 0;
int insertIndex = 0;
for(int i = 1; i < arr.length; i++) {
insertVal = arr[i];
insertIndex = i - 1;
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
if(insertIndex + 1 != i) {
arr[insertIndex + 1] = insertVal;
}
}