插入排序
思路:
从第二个元素开始遍历,如果当前元素比其前一个元素小,那么前一个元素后移一位,
此时空出一个位置,再往前比较,如果比当前元素大,那么空出的位置就是当前元素要插入的位置,
否则将与当前元素比较的元素后移一位,也就是空出的位置又向前移动一位,以此类推,
当满足条件时,就将当前元素插入到空出的位置中。
1 9 6 2 4 3
1 9 (9>1则继续下一循环,也就是6)
1 9(6<9,所以将9后移一位,空出一个位置)
1 9(6>1,所以空出的位置插入6)
1 6 9(继续下一次循环,也就是2)
1 6 9(2<9,所以9后移一位,空出一个位置,继续,判断空出的位置是不是插入2)
1 6 9(2<6,所以6也要后移一位)
1 2 6 9(2>1,所以当前空出的位置就是2的目的地)
..........
public static void insertSort(int[] array){
//1.记录当前元素,因为前面元素后移会覆盖它
int insertNode;
// 记录要与当前元素进行比较的元素位置,初始值为当前元素所在位置的前一个位置,然后依次j--往前找
// 直到j所指向元素<当前元素
int j;
for (int i = 1; i < array.length; i++) {
insertNode=array[i];
j=i-1;
//如果要插入的元素小于第j个元素,就将第j个元素向后移动
while (j>=0&&insertNode<array[j]){
array[j+1]=array[j];
j--;
}
//while每循环一次,j减一,当while不满足条件时,j指向的是空位置的前一个元素
array[j+1]=insertNode;
}
}
public static void main(String[] args) {
int[]array =new int[10];
for (int i = 0; i < array.length; i++) {
array[i]=(int)(Math.random()*100);
System.out.print(array[i]+",");
}
insertSort(array);
System.out.println();
for (int num:array){
System.out.print(num+",");
}
}