动图:

插入排序算法_赋值


插入排序的关键是,总是认为前面的是有序的,所以从第二个开始比较。需要额外的一个空间来存放即将插入的值,所以当前面的元素需要后移时不用考虑覆盖问题。

代码:

public class InsertSort {

public static void main(String[] args){
int[] nums = new int[]{ 8, 9, 1, 7, 2, 3, 5, 4, 6, 0 };
int[] res = sort(nums);
for(int i=0; i<res.length; i++){
System.out.print(res[i] + " ");
}

}

public static int[] sort(int[] nums){
int preIndex; // 前一个元素的索引
int current; // 存放需要插入的元素值
for(int i = 1;i < nums.length;i++){
preIndex = i-1;
current = nums[i];
// 向前扫描,只要前面还有元素,并且前一个元素比当前元素大才将元素后移
while (preIndex >= 0 && nums[preIndex] > current){
nums[preIndex + 1] = nums[preIndex];
preIndex--;
}
// 当遍历到最前面,或者找到插入位置时,进行赋值
nums[preIndex + 1] = current;
}
return nums;
}
}