先贴一下实现插入排序的基本算法,当然有很多种,现在只贴我使用过的
public static void sortInsert2(int[] arr){ for(int i=1;i<arr.length;i++){//从第二个元素开始,如果该元素大于之前的元素 不需要用,继续循环下一个,如果小于前面的元素,循环寻找插入位置 if(arr[i-1] > arr[i]){//插入的数字小于前面的数字 int j; int key = arr[i];//需要插入的数字 //将i-1位后面的元素都后移一位 arr[i] = arr[i-1]; for(j=i-1;j>=0 && arr[j]>key;j--){ arr[j+1] = arr[j]; } j = i-1; while(j>=0 && arr[j]>key){ arr[j+1] = arr[j]; j--; } arr[j+1] = key; arrayToString(arr); } } //arrayToString(arr); }一开始不是很理解最后arr[j+1] = key;这个的意思,为什么要给j+1进行赋值?我个人的理解是前面都对j+1进行了赋值,最后就应该是给arr[j]进行赋值才是正确的,后面想想,猫腻在for循环,每次最后的j–都在代码块最后执行,最后出来的时候j已经进行了减一操作。为了验证去百度了一下关于for循环的执行流程,发现一个不错的案例可以证实:
private static boolean foo(char c) { System.out.print(c+" "); return true; } public static void main(String[] args) { int i=0; for(foo('A');foo('B')&&i<3;foo('C')){ i++; foo('D'); } }自已亲自执行一下,就知道是怎么回事了。点赞! 案例摘自:http://www.jb51.net/article/60717.htm