public class HeapSort {
/**
* @param args
*/
public static void main(String[] args) {
int [] test = {1,2,3,4,5,6,7,8,9};
heapSort(test);
/*for(int i =0;i<test.length;i++){
System.out.println(test[i]);
}*/
// queue = test;
// init(test);
// fixUp(8);
/* for(int i =0;i<test.length;i++){
System.out.println(test[i]);
}
System.out.println("********************");*/
/* for(int i =0;i<queue.length;i++){
System.out.println(queue[i]);
}*/
}
private static int size = 0;
private static int[] queue;
public static void init(int[] data){
queue = new int[data.length+1];;
for(int i=0;i<data.length;i++){// father is bigger than child and left child is bigger than right child
queue[++size]= data[i];
fixUp(size);
}
for(int i =0;i<queue.length;i++){
System.out.println(queue[i]);
}
}
public static void remove(){
swapData(queue, 1, size--);
fixDown(1);
}
public static void fixDown(int k){//
int j =0;
while((j=k<<1)<=size){
if(j<size && queue[j]<queue[j+1])
j++;
if(queue[k]>queue[j])
break;
swapData(queue, k, j);// swap with the biggest element
j = k;
}
}
public static void fixUp(int k){//queue[k] keep up, if it is less that queue[j],then stop up
while(k>1){
int j = k>>1;
if(queue[j]>queue[k])
break;
swapData(queue, k, j);
k=j;
}
}
public static void swapData(int []data, int i, int j){
int temp = data[i];
data[i] = data[j];
data[j]= temp;
}
public static void heapSort(int[] data){
init(data);
for(int i =0; i<data.length;i++){
remove();
}
System.arraycopy(queue,1, data, 0, data.length);
for(int i =0;i<data.length;i++){
System.out.println("AfterSort--data--->"+data[i]);
}
}
}
HeapSort
最新推荐文章于 2022-08-20 23:22:09 发布