2017-02-16 63 views
0

我试图用不是面向对象的静态方法构建一个最大堆。这就是我所拥有的,但是当我用以下数组调用方法时:{“C”,“D”,“A”,“B”,“E”},它只是返回数组,而不是最大堆订购。我相信输出应该是{“E”,“D”,“A”,“B”,“C”}。任何帮助都是极好的。先谢谢你!不是面向对象的buildMaxHeap方法

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); 
    } 
    } 
} 
+0

对不起,我开始与N = 0,但你显然下手N = 5 , 对?那么,如果你调试你的算法,它永远不会进入任何if,因为你的值总是超出数组的界限(左和右大于x.length)。所以,你永远不会改变阵列。 – Igor

回答

0

记住,以及在C和C++编码你可能在使用电池的长度作为操作员的经验问题与uncorrect输出,因为不同大小的初始小区和它的指针组成。它会覆盖单元格的初始长度并将其缩短为8个字节。

尝试检索这些字符的ASCII值,比使用除&征服排序algorythm命令您的数组单元格的字符基于其数值。字符的

获得ASCII值:Get ASCII value at input word

更好的和更广泛的与细胞的解释问题,其指针的长度: Why does a C-Array have a wrong sizeof() value when it's passed to a function?

+0

抱歉没有提供适当的代码,但我主要用C/C++编程 – TheInvisibleMan

相关问题