排序思想
插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
排序原理
1.把所有元素分为两组,已经排序和未排序的;
2.找到未排序的组中的第一个元素,向已经排序的组中进行插入;
3.倒叙遍历已经排序的元素,依次和待插入元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位。
代码实现
@Test
public void insertSort(){
int[] arr={101, 34, 119, 1 };
for (int i=1;i<arr.length;i++){
//定义一个带插入的数
int num=arr[i];
//定义一个变量指向num的前一个数的下标
int head=i-1;
//给num找到插入的位置
//说明
//1.last>=0保证在给num找插入位置时不越界
//2.num<arr[last]待插入的数,表示还未找到插入位置
//3.就需要将arr[last]后移
while (head>=0&&num<arr[head]){
//未找到将arr[head]后移,交换
arr[head+1]=arr[head];
//head往前走
head--;
}
//当推出循环时,说明找到了插入位置,last+1
arr[head+1]=num;
System.out.println("第"+(i)+"轮插入");
System.out.println(Arrays.toString(arr));
}
}