介绍
基本思想: 把n个待排序的序列看成为一个有序表和无序表,开始时把待排序序列的第1个元素看成是有序表,无序表中包含n-1个元素,排序时循环从无序表中取值与有序表中,插入到正确的位置。
如下图
实现
public class InsertSort {
public static void insertSort(int[] arr) {
//把后面的无序列按有序列往前插入
for(int i=1;i<arr.length;i++) {
int insertValue=arr[i]; //第i+1轮要插入的值
int index=i-1; //比较前面有序队列中最大的值,如果有值则往前插
while(index>=0&&insertValue<arr[index]) { //防止越界,往前查找要插入的位置
arr[index+1]=arr[index];
index--;
}
if(index+1!=i) { //判断插入值与原先位置是否需要变化
arr[index+1]=insertValue; //把插入值放入到寻找到的位置
}
System.out.println("第"+i+"次排序结果:"+Arrays.toString(arr));
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]= {5,23,-7,8,2};
insertSort(arr);
}
}
排序结果