这个过程,也是一个自我提高的过程。
我开始自已写,while(in > 0 && a[in - 1] >= temp )这里总有问题。
后来仔细想想,也是,如果IN>0放在后面,那么&&之后可能会逻辑短路。且IN-1先执行,再判断IN,就会出现数组下标IN-1等于-1越界的情况。所以,IN>0必放前面。
第二,将&&更换成&行不行?也不行。因为&不会逻辑短路,就算IN>0不成立,它一样会执行IN-1的数组下标判断,一定会出错。
真的是一步一小心呀。在规则内,可以横行,但稍稍越出规则一步,都是不允许的。
public void insertionSort() { int out; int in; for(out = 1; out < nElems; out++){ long temp = a[out]; in = out; System.out.print(a[in] + " \tbefor sort :\t"+ in); while(in > 0 && a[in - 1] >= temp ) { a[in] = a[in -1]; in--; } System.out.println("\t---after sort : \t" + in); a[in] = temp; } }
为了仔细看到对IN位置的查找,我加了两个输出,更能理解代码的执行逻辑过程。