不是面向对象的buildMaxHeap方法

时间:2017-02-16 02:07:54

标签: java

我尝试使用不面向对象的静态方法构建最大堆。这就是我所拥有的,但当我使用以下数组调用该方法时:{" C"," D"," A"," B&# 34;," E"},它只是按原样返回数组,而不是以最大堆顺序返回。我相信输出应该是{" E"," D"," A"," B"," C&#34 ;}。任何帮助都是极好的。提前谢谢!

public static void buildMaxHeap(String[] x, int n) {
    int left = 2*n;
    int right = 2*n + 1;
    int max = n;
    for(int i = x.length/2; i >= 0; i--) {
    if(left <= x.length && x[left].compareTo(x[max]) > 0) {
        max = left;
    }
    if(right <= x.length && x[right].compareTo(x[max]) > 0) {
        max = right;
    }
    if(max != n) {
        String temp = x[n];
        x[n] = x[max];
        x[max] = temp;
        buildMaxHeap(x,max);
    }
    }
}

1 个答案:

答案 0 :(得分:0)

请记住,除了在C和C ++中编码时,由于初始单元格及其指针的大小不同,使用单元格的长度作为运算符时,可能会遇到不正确输出的问题。它会覆盖单元的初始长度并将其缩短为8个字节。

尝试检索这些字符的ASCII值,而不是使用divide&amp;征服排序算法来命令您的阵列单元格&#39;基于数值的字符。

获取角色的ASCII值:Get ASCII value at input word

更好更广泛地解释了单元格及其指针长度的问题: Why does a C-Array have a wrong sizeof() value when it's passed to a function?