原理:简单,给定的一组记录,将其分为两个序列组,一个为有序序列(按照顺序从小到大或者从大到小),一个为无序序列,初始时,将记录中的第一个数当成有序序列组中的一个数据,剩下其他所有数都当做是无序序列组中的数据。然后从无序序列组中的数据中(也就是从记录中的第二个数据开始)依次与有序序列中的记录进行比较,然后插入到有序序列组中合适的位置,直到无序序列组中的最后一个数据插入到有序序列组中为止。
如图:
代码如下:
/**
* @author 江河
* @date 2019-06-16 20:43
*/
public class SortTest {
public static void main(String[] args) {
int[] array= {38,65,97,76,13,27,49};
SortTest sortTest = new SortTest();
sortTest.insertSort(array);
for (int i :array) {
System.out.print(i+",");
}
}
//插入排序,按从小到大的顺序
public void insertSort(int[] array){
/**
* 理解插入排序的原理后,按照这样的思路进行编码
* 首先第一个for循环把第一个数当成有序集合,后面
* 当成无序集合循环一遍比较,判断是否arry[i]<array[i-1]
* 满足进入下个有序集合里与每个有序集合元素比较
* 两个条件在第二个for这实现,满足与剩下j=i-1元素比且满足
* j的元素>temp才交换。比如上面满足j=2>=0&&array[2]=97>76
* 才交换。当j=1时 && array[1]=65>76不满足跳出循环。
*/
int j,temp; //temp:记录
for(int i = 1; i < array.length; i++){
if(array[i] < array[i-1]){
temp = array[i];
for(j = i-1; j>=0&&array[j]>temp; j--){
array[j+1] = array[j];
}
array[j+1] = temp;
}
}
}
}
上面原理与图片及部分代码引用别人的,作者请见谅,懒的画图与打字。