插入排序
要求:现在有ABCDE五个盒子,现在需要把它们按照从小到大的排序
插入排序算法思路:
第一轮:从B开始往前比较,如果B大于A,则直接下一轮,反之,交换AB
第二轮:从C开始往前比较,如果C大于B,直接下一轮,不用再去比较C,A的大小,因为如果C大于B,则C一定大于A(因为B大于A);如果C小于B,那么首先用一个变量K把C的值先保存起来,然后再把B的值赋给C;如果C还小于A,那就将A的值赋给B,最后把K值赋给A,如果C大于A,那就将K值赋给B;
第三轮:…
…
如果有N个数,那么就需要N-1轮,因为直接从第二个数开始比较;而每一轮最多需要比较K次,其中K代表第K轮,最少比较一次
public static void insert(int[] arr){
int cur = 0;
int curBeforeIndex = 0;
for (int i=1;i<arr.length;i++){
cur = arr[i];
curBeforeIndex = i-1;
while(curBeforeIndex>=0 && cur<arr[curBeforeIndex]){
arr[curBeforeIndex+1]=arr[curBeforeIndex];
curBeforeIndex--;
}
arr[curBeforeIndex+1]=cur;
}
}