for( int i = array.length/2; i>= 0; i-- )
sink( array, i, array.length );
for( int i = array.length-1; i>= 0; i-- ){
swap( array, 0, i );
sink( array, 0, i );
}
private void sink( Comparable[] array, int index, int last ){
while( true ){
int left = 2*index;
int right = left+1;
if( left >= last )
return;
else if( right >= last ){
boolean leftGreater = 0 < array[ left ].compareTo( array[ index ] );
swap( array, index, left );
return;
}
boolean leftGreater = 0 < array[ left ].compareTo( array[ index ] );
boolean rightGreater = 0 < array[ right ].compareTo( array[ index ] );
if( leftGreater && rightGreater ){
boolean leftGreaterRight = 0 < array[ left ].compareTo( array[ right ] );
if( leftGreaterRight ){
swap( array, index, left );
index = left;
}
else{
swap( array, index, right );
index = right;
}
}
else if( leftGreater ){
swap( array, index, left );
index = left;
}
else if( rightGreater ){
swap( array, index, right );
index = right;
}
else
break;
}
Titel | Forum | Antworten | Datum | |
---|---|---|---|---|
E | Heapify und Heapsort | Java Basics - Anfänger-Themen | 11 | |
D | Heapsort - wie? | Java Basics - Anfänger-Themen | 2 |