package ding1; //二叉树排序
import java.util.Scanner; //数组用的是位序!!
class A{
void exch(int a[],int i,int j) { //交换a[i]和a[j]的值
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
void swim(int a[],int k) { //上浮第k位置的元素 至合适的位置(树由上到下降序)
while(k>1 && a[k/2]<a[k]) {
exch(a,k/2,k);
k=k / 2;
}
}
void sink(int a[],int k,int N) { //下沉第k位置元素,优先与左右孩子中最大的互换位置(树由上到下降序)
while(2*k <= N) {
int j=2*k;
if(j<N && a[j]<a[j+1]) j++;
if(!(a[k]<a[j])) break;
exch(a,k,j);
k=j;
}
}
}
public class ceshi{
public static void main(String[] args) {
A a = new A();
Scanner reader = new Scanner(System.in);
int x[]= new int[10];
for(int i=0;i<10;i++) { //注:x[0]不用!!填“0”占位置。
x[i]=reader.nextInt();
}
int N = x.length - 1; //去除x[0]这个元素后的数组长度
int N1 = N;
for(int k=N/2;k>=1;k--) { //使二叉树有序(由上到下降序)
a.sink(x,k,N);
}
while(N>1) { //由上到下升序排序
a.exch(x,1,N--);
a.sink(x,1,N);
}
for(int i=1;i<=N1;i++) {
System.out.println(x[i]);
}
}
}
测试结果: