我嘗試從我的課本做堆自下而上從的僞碼構造但是輸出即時得到不正確的堆即時得到了2 9 8 6 5 7建立一個自下而上的堆
有誰知道IM腳麻(僞代碼是一本教科書,並堆需要是數組)
這裏是僞代碼自下而上IM與
//constructs a heap from elements of a given array by bottom up algorithm
//input an array H[1...n] of orderable items
//output a heap H[1...n]
for i<- [n/2] downto 1 do
k<-i; v<-H[k];
heap<-False
while not heap and 2*k <= n do
j<-2*k
if(j<n) //there are two children
if H[j] < H[j+1] j<- j+1
if v>=h[j]
heap = true
else H[k]<-H[j] k<-j
H[k] <-V
在這裏工作是我的代碼
package heapbottomup;
import javax.swing.Spring;
public class heapbottomup {
public static void main(String args[]){
int[] array = {2 ,9 ,7 ,6 ,5 ,8};
BottomUp(array);
}
static int[] BottomUp (int[]array){
int n = array.length-1;
for(int i=(n/2);i>=1;i--){
int k =i;
int v = array[k];
boolean Heap = false;
while(!Heap && ((2*k)<=n)){
int j = 2*k;
if (j<n){
if(array[j]<array[j+1]) j =j+1;
}
if(v>=array[j]){
Heap=true;
}
else{
array[k]= array[j];
k=j;
}
array[k]=v;
}//end while
}//end for
print(array);
return(array);
}
static void print(int[]array){
if(array==null){
System.out.println("empty");
return;
}
for(int i =0;i<array.length;i++){
System.out.print(array[i] + " ");
}
System.out.println();
}//end print
}
其更好,但現在我得到的排序堆即時得到9 8 7 6 5 2時,正確的輸出是9 6 8 2 5 7 – hockeyfreak863
從你的僞代碼的縮進,它看起來像過去的行'H [k] <-V'在時間之外,但是在你的代碼中它是在時間之內的。 –
請注意,如果使用1索引數組更容易理解或更快速地進行操作,則可以始終使數組大於必要的數值,並且不要使用第0個條目。 – dfeuer