public class HeapSort {
public static void heapSort(Integer [] data){
System.out.println("开始排序!");
int arrayLength=data.length;
//循环建堆
for (int i = 0; i < data.length; i++) {
builMaxdHeap(data, arrayLength-1-i);
swap(data,0,arrayLength-1-i);
}
}
private static void builMaxdHeap(Integer [] data,int lastIndex){
for (int i = (lastIndex-1)/2 ; i >= 0; i--) {
int k =i;
while(k*2+1 <= lastIndex){
int biggerIndex = 2*k+1;
if(biggerIndex<lastIndex){
if(data[biggerIndex].compareTo(data[biggerIndex+1])<0){
biggerIndex++;
}
}
if(data[k].compareTo(data[biggerIndex])<0){
System.out.print("建堆交换:");
swap(data,k,biggerIndex);
k=biggerIndex;
}
else
{
break;
}
}
}
}
private static void swap(Integer [] data ,int i,int j){
Integer temp=data[i];
data[i]=data[j];
data[j]=temp;
System.out.print(data[j] +" 与 "+data[i] +" 交换");
for (Integer integer : data) {
System.out.print(integer+",");
}
System.out.println();
System.out.println();
}
public static void main(String[] args) {
Integer[] data={
new Integer(4),
new Integer(40),
new Integer(30),
new Integer(21),
new Integer(25),
new Integer(9),
new Integer(50)
};
System.out.print("排序之前:");
for (Integer integer : data) {
System.out.print(integer+",");
}
System.out.println();
heapSort(data);
System.out.println("排序之后:");
for (Integer integer : data) {
System.out.print(integer+",");
}
System.out.println();
}
}