我也觉得有问题, 不过我的答案跟楼主也不同。。。附上我的答案: 好像牛客网目前有点小问题, 图片传不上来 我用数组的方式表示:  从A.length/2 = 8/2 = 4 也就是 数字1开始调整    45301726 -> 45301726 -> 45361720 -> 45761320 -> 46751320 -> 76451320 附上代码:  public int[] heapSort(int[] A, int n) {         for(int i=(n-1)/2;i>=0;--i){    //将数组初始化为堆             heapAdSort(A,i,n);         }         print(A);     //只要初始化部分,后面代码注释掉    /*     for(int i=n-1;i>0;--i){              int temp = A[i];             A[i] = A[0];             A[0] = temp;             heapAdSort(A,0,i);         } */         return A;     }  public void heapAdSort(int[] A,int i,int n){//A为数组,i为结点值,n为数组长度         int child = 2 * i + 1; //左孩子         int temp = A[i];//保存节点值         while(child < n){              if(child+1 < n && A[child] < A[child+1]){// 把child节点指向左右孩子中较大的一个                 child ++ ;             }             if(A[i] < A[child]){//如果节点小于孩子值,则交换,节点向下                  A[i]=A[child];                 i = child;                 child = 2*i+1;             }else{                 break;             }             A[i] = temp;//将节点保存;         }     }     public void print(int[] A){     for(int i:A){     System.out.print(i+" ");     }        System.out.println();     }
点赞 3

相关推荐

牛客网
牛客企业服务