微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

堆 - 以错误的顺序返回堆

如何解决堆 - 以错误的顺序返回堆

我下面的方法是修复堆顺序。

private void upHeap(int i) {
    // TO DO Implement this method
    int temp = 0;
    int n = heap.length-1;

    for(int j=n;j>0;j--){
        
        if(heap[j]>heap[parent(j)]){                      //if current index is greater than its parent,swap
            temp = heap[j];                         //use a temporary variable to help
            heap[j] = heap[parent(j)];                    
            heap[parent(j)] = temp;
            
            upHeap(heap[parent(j)]);
        }   
    }
      
}

和下堆

private void downHeap(int i) {
    // TO DO Implement this method
    int temp = 0;
  
    for(int j=i; j<heap.length; j++){
        if(heap[i]<heap[j]){
            temp = heap[j];
            heap[j] = heap[i];
            heap[i] = temp;
    
        }
    }
        
    
}

这是一个最大堆,所以数字应该是降序的。任何人都可以在我的代码中看到我出错的地方吗?它现在给我一个索引越界错误

解决方法

试试这些:

private void upHeap(int i) {
    int temp = 0;

    for (int j = i; j >= 0; j--) {
        for (int k = j - 1; k >= 0; k--) {
            if (heap[j] > heap[k]) {
                temp = heap[j];
                heap[j] = heap[k];
                heap[k] = temp;
            } else {
                break;
            }
        }
    }

}

private void downHeap(int i) {
    int temp = 0;

    for (int j = i; j < heap.length; j++) {
        for (int k = j + 1; k < heap.length; k++) {
            if (heap[k] > heap[j]) {
                temp = heap[j];
                heap[j] = heap[k];
                heap[k] = temp;

            } else {
                break;
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。