插入排序(Insert Sort)基本思想:把n个待排序的元素看成一个有序列表和无序列表,开始的有序列表只有一个元素,无序列表中含有n-1个元素,排序过程中每次从无序列表中取出第一个元素,将其与有序表中的元素从后往前逐个比较,并插入到合适的位置,完成排序。
代码实现
private static void sort(int[] arr){
int insertVal = 0; //待插入元素的值
int insertIndex = 0; //待插入元素要插入的坐标
for (int i = 1; i < arr.length; i++) {
insertVal = arr[i];
insertIndex = i-1;//当前元素的前一个位置
//判断当前元素的前一个元素坐标是否小于0,并判断前一个元素是否大于当前待插入元素
while (insertIndex >= 0 && arr[insertIndex] > insertVal){
arr[insertIndex+1] = arr[insertIndex];//若前一个元素大于当前待插入元素,前一个元素后移
insertIndex -- ;//待插入位置往前移动一位
}
// 当退出while循环时,说明插入的位置找到, insertIndex + 1 index--之后不符合条件了退出循环
//这里我们判断是否需要赋值
if(insertIndex != i-1){
arr[insertIndex+1] = insertVal;
}
}
}