排序算法之堆排
public class HeapSorting{
public static int LeftChild(int i){
return 2*i+1;
}
static void PercDown(int A[],int i,int N){
int Child;
int Tmp;
for(Tmp=A[i];LeftChild(i)<N;i=Child){
Child=LeftChild(i);
<pre name="code" class="java"> //如果节点包含左、右子树,且右节点大于左节点,则右子节点替换根节点
if(Child!=N-1&&A[Child+1]>A[Child])Child++;if(Tmp<A[Child])A[i]=A[Child];elsebreak;}A[i]=Tmp;} static void Heapsort(int A[],int N){int i;for(i=N/2;i>=0;i--) //构建堆PercDown(A,i,N);for(i=N-1;i>0;i--){ //“删除”最大节点Swap(A,i);PercDown(A,0,i);}}static void Swap(int Arr[],int i){int temp=Arr[0];Arr[0]=Arr[i];Arr[i]=temp;}public static void main(String[] args){int iArray[]={6,5,3,1,8,7,2,4};System.out.println("Before Sorting:");print(iArray);Heapsort(iArray,iArray.length);System.out.println("After Sorting:");print(iArray);}public static void print(int[] iArr){System.out.print("{");for(int i=0;i<iArr.length;i++){if(i<iArr.length-1)System.out.print(iArr[i]+",");elseSystem.out.print(iArr[i]);}System.out.println("}");}}