java實現堆排序

public class Heap {
	private static int leftChild(int i){
		return 2*i+1;
	}
	private static void perc(int[] a,int i,int n){   //調整堆的方法
		int child;
		int temp;
		for(temp=a[i];leftChild(i)<n;i=child){
			child=leftChild(i);
			if(child!=n-1&&a[child]<a[child+1])//比較左右孩子的大小
				child++;
			if(temp<(a[child]))                //根節點小於左右孩子
				a[i]=a[child];
			else
				break;
		}
		a[i]=temp;//
	}
	public static void heaps(int[] a){         //堆排序的地方法
		for(int i=a.length/2;i>=0;i--){        //初始化堆,從最後一個非終端節點至根節點
			perc(a,i,a.length);
		}
		for(int i=0;i<a.length;i++){           //重複執行移走對頂及重建堆的操作
			int temp=a[0];
			a[0]=a[a.length-i-1];
			a[a.length-i-1]=temp;
			perc(a, 0, a.length-i-1);          //重建堆
		}
	}
	public static void main(String[] args) {
		int r[]={50,40,45,36,32,18,22,30};
		System.out.println("原始的序列:");
		for(int i=0;i<8;i++){
        	System.out.print("  "+r[i]);
        }
		heaps(r);
		System.out.println("\n"+"排序好的序列:");
        for(int i=0;i<8;i++){
        	System.out.print("  "+r[i]);
        }
	}
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章