计算鸡鸡 2022-09-18 22:54
浏览 13
已结题

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;i<n;i=2*i+1)
          {
              if(i+1<n && arr[i]<arr[i+1]) {i++;}
             // if(arr[i]<arr[i+1] && i+1<n) i++;
              if(arr[i]>temp) {arr[k]=arr[i]; k=i;}
              else break;
          }
          arr[k]=temp;
         // print(arr);
      }
       
运行结果及报错内容

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

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

待解决,求

评论

  • 写回答

1条回答 默认 最新

  • 计算鸡鸡 2022-09-18 23:26
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月26日
  • 已采纳回答 9月18日
  • 创建了问题 9月18日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题