三口一头猪
插入排序
//外层循环控制排序的趟数,只是有的趟时不需要移动数据的。
for(int i = 1; i < arr.length ; i++) {//i从1开始时认为arr[0]是有序的
//arr[i]是无序区间的起点,小于i的部分认为是有序的(i的作用是 : 1.区分有序区间和无序区间,2.控制循环趟数)
int value = arr[i];
int j=i-1;//j是有可能插入的位置
//第二层循环是从需要插入的数据的位置,往前循环,目的是寻找插入位置,把这个数据提出来,然后其他的集体后移
//我们只知道需要当前这个数是小的,比value小,要往前插入,但是不知道插在哪里,所以要往前寻找,在没找到的时候将数据后移,找到后退出循环
//但是不知道要移动多少位,要比较才知道,所以往前边比较边循环,直到找到插入位置,退出循环,将数据插入
for(; j >= 0; j--) {//一定要有==0 ,不然不能移动第一个元素
if(arr[j] > value) {
//往后移动
arr[j+1] = arr[j];//第一次执行时,arr[i]已经变了,所以一定要存为value
}
else {
break;
}
}
//退出循环的位置,就是合适的位置
arr[j+1] = value;//不需要的移动的位置,也就是插入位置
}