我花了几个小时就完成了这个,但我是c ++面向对象编程的新手,所以可能一些函数参数没有按原样传递,但我找不到它。对于此代码,我得到以下输出:1 2 7 10 3 2 4 15
public static void shuffle(char[] array){
Random generator = new Random(12345);
long numberOfShufflesMultiplier = (long)Math.pow(array.length,4); //your variable
for (long i=0; i<numberOfShufflesMultiplier; i++) {
int s = generator.nextInt(array.length);
int index = (int)(i%array.length);
char temp = array[index];
array[index] = array[s];
array[s] = temp;
}
}
答案 0 :(得分:1)
您在index
函数中混淆了largest
和maxHeapify
。在第二个&#34;如果&#34;表达式,您应该将right_child
与largest
进行比较,而不是index
,因为您需要从三个顶点中选择一个具有最大值的顶点:index
,left_child
和right_child
。
这是一行经过修正的代码:
if((right_child <= heap_size) && (arrayX[right_child] > arrayX[largest]))
largest = right_child;