首先默认第一个元素是已排序的,剩下元素是待排序的,从第二个元素开始遍历 取出待排序区域的第一个元素element 和已排序区域的最后一个元素a[j]往前开始比较大小 若待排元素大于等于最后一个元素则直接跳出循环 将待排元素赋值给a[j+1] 若待排元素小于最后一个元素 将最后一个元素的值赋值给a[j+1] 然后j-- 继续比较倒数第二个元素和待排元素...
java代码实现
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = {5, 3, 8, 6, 2, 7, 1, 4};
insertSort(arr);
}
private static void insertSort(int[] arr){
// i代表待插入元素的索引
for (int i=1;i<arr.length;i++){
// 待排的素
int element=arr[i];
// 已排序区域的最后元素索引
int j=i-1;
// j表示已排序区域元素的下标 大于等于0说明有已排序元素 需比较
while(j>=0){
// 若待排元素小于最后一个元素 将最后一个元素的值赋值给a[j+1] 然后j-- 继续比较倒数第二个元素和待排元素...
if (element<arr[j]){
arr[j+1]=arr[j];
}else{
// 若待排元素大于等于最后一个元素则直接跳出循环 将待排元素赋值给a[j+1]
break;
}
j--;
}
arr[j+1]=element;
System.out.println(Arrays.toString(arr));
}
}
}