觉的左老师这里建堆有些问题,大家看下

截图:

老师在对序列 4 5 3 0 1 7 2 6第一次建立大根堆的时候,结果如图,我是这样做的,附上连接: http://www.nowcoder.com/courses/1/2/1




全部评论
我也觉得有问题, 不过我的答案跟楼主也不同。。。附上我的答案: 好像牛客网目前有点小问题, 图片传不上来 我用数组的方式表示:  从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();     }
点赞 回复 分享
发布于 2016-09-20 09:40
你的结果应该没错
点赞 回复 分享
发布于 2016-09-20 10:25
你是对  的
点赞 回复 分享
发布于 2017-10-20 03:16

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务