java中堆排序的一点小疑问

问题遇到的现象和发生背景

java语言中写的堆排序代码

用代码块功能插入代码,请勿粘贴截图
public class sort {
    public static void main(String[] args){
        int []arr={30,1001,23,96,78,37,45,66,99,100,1000,1};
        print(arr);
        sort(arr,arr.length);
        print(arr);    
    }
   public static void print(int []arr){//打印数组
      if(arr==null || arr.length<1) return ;
       for(int i: arr) System.out.print(i+" ");
       System.out.println();
   }
public static void sort(int arr[],int n){//堆排序
       for(int i=n/2-1;i>=0;i--)       
           adjustSort(arr,i,n);
       for(int i=n-1;i>0;i--)
       {
           int temp=arr[0];
           arr[0]=arr[i];
           arr[i]=temp;
           adjustSort(arr,0,i);  
       }
   }
      public static void adjustSort(int arr[],int k,int n){
          int temp=arr[k];
          for(int i=2*k+1;i2*i+1)
          {
              if(i+11]) {i++;}
             // if(arr[i]
              if(arr[i]>temp) {arr[k]=arr[i]; k=i;}
              else break;
          }
          arr[k]=temp;
         // print(arr);
      }
       
运行结果及报错内容

在adjustSort函数中,第一个if语句执行正确,注释掉的报溢出错

我的解答思路和尝试过的方法

待解决,求

评论

猜测: 这与&&的执行顺序有关,if(arr[i]<arr[i+1] && i+1<n) i++;的时候,先执行arr[i]<arr[i+1]而i+1所指的数据元素为空,所以会有溢出错误,当反过来先判断i+1< n 时,&&前面的条件为true,后面的才会执行,没有溢出错误