heapsort.java文件:
public class HeapSort{
public static void run(int[] array, int size){
heapify(array, size, 1);
}
private static void heapify(int[] array, int size, int v){
if (v*2>=size){
return;
}
heapify(array, size, v*2);
heapify(array, size, v*2+1);
fixHeap(array, size, v);
}
private static void fixHeap(int[] array, int size, int v){
if (v*2>=size){
return;
}
int u = 0;
if (array[v*2]>array[(v*2)+1]){
u = v*2;
} else{
u = (v*2)+1;
}
if (array[u]>array[v]){
int temp = array[u];
array[u] = array[v];
array[v] = temp;
fixHeap(array, size, u);
}
}
}
main.java文件:
import java.util.Random;
public class Main{
public static void main(String args[]){
Main m = new Main();
m.run();
}
private void run(){
int size = 8;
int[] array = new int[size];
this.randomArray(array,size);
System.out.println("");
HeapSort.run(array,size);
this.printArray(array, size);
System.out.println("");
}
private void randomArray(int[] array, int size){
Random r = new Random();
int el = 0;
for(int i=0; i<size; ++i){
el = r.nextInt(50);
array[i] = el;
System.out.print(array[i] + " ");
}
}
private void printArray(int[] array, int size){
for(int i=0; i<size; ++i){
System.out.print(array[i] + " ");
}
}
}
输出如下:
44 18 40 40 11 4 14 6
44 40 40 18 11 4 14 6
或:
30 43 21 41 25 16 36 20
30 43 25 41 21 16 36 20
或:
42 38 19 20 32 35 17 21
42 38 35 21 32 19 17 20
如您所见,堆已创建,但第一个元素未被触及。我怎样才能解决这个问题?
我以为我可以扫描所有数组,找到最大值并将其放在基数(第一个位置),但有没有更优雅的方法来解决这个问题?
暂无答案!
目前还没有任何答案,快来回答吧!