堆排序
@SuppressWarnings ( "rawtypes" )
public class HeapSort {
public static void sort ( Comparable[ ] v) {
int size= v. length- 1 ;
for ( int i = size/ 2 ; i >= 1 ; i-- ) {
sink ( v, i, size) ;
}
for ( int i = size; i > 1 ; i-- ) {
Comparable temp= v[ 1 ] ;
v[ 1 ] = v[ i] ;
v[ i] = temp;
sink ( v, 1 , i- 1 ) ;
}
}
public static void sink ( Comparable[ ] v, int a, int b) {
while ( a* 2 <= b) {
int j= a* 2 ;
if ( j+ 1 <= b && less ( v, j, j+ 1 ) ) { j++ ; }
if ( less ( v, a, j) ) { Comparable temp= v[ a] ; v[ a] = v[ j] ; v[ j] = temp; a= j; }
else break ;
}
}
public static boolean less ( Comparable[ ] v, int a, int b) {
return v[ a] . compareTo ( v[ b] ) < 0 ;
}
public static boolean issorted ( Comparable[ ] v) {
for ( int i = 1 ; i < v. length - 1 ; i++ ) {
if ( less ( v, i + 1 , i) )
return false ;
}
return true ;
}
public static void show ( Comparable[ ] v) {
StringBuffer sb= new StringBuffer ( ) ;
for ( int i = 0 ; i < v. length; i++ ) {
sb. append ( " " + v[ i] ) ;
}
System. out. println ( sb. toString ( ) ) ;
}
public static void main ( String[ ] args) {
Double[ ] n= { 1.2 , 3.5 , 8.2 , 0.5 , 1.8 , 2.9 , 3.0 , 4.5 , 0.3 , 0.1 , 5.3 , 2.9 , 4.2 , 8.0 , 7.6 , 5.0 , 0.1 } ;
sort ( n) ;
show ( n) ;
System. out. println ( issorted ( n) ) ;
}
}