注意&&前后两个表达式有顺序的差别

Posted on 2019-01-17 20:39  罐装的天才  阅读(387)  评论(0)    收藏  举报
//插入排序
public static void insertSort(int[] arr) {
        // 遍历所有数字
        for (int i = 1; i < arr.length; i++) {
            int temp = arr[i];
            int j;
            if(arr[i-1]>temp) {
//不要写成arr[j-1]>temp&&j>0.因为当j=0的时候,表达式会先判断arr[0-1]>temp,然后再去判断后面的j>0,这样会报指针越界异常.但是如果先判断j>0,此时j=0,j>0判断的时候结果为false,便不会去判断arr[0-1]>temp这个表达式,也就不会出现arr[-1]的情况 
                for(j=i;j>0&&arr[j-1]>temp;j--) {
                    arr[j]=arr[j-1];
                }
                arr[j]=temp;
            }
        }
    }