简单的堆排序

#include <iostream>

using namespace std;

void HeapAdjust(int *A, int s, int m)         //下标以1开始
{
    int temp_first=A[s];
    for(int j=2*s;j<=m;j*=2)
    {
        if(j+1<=m && A[j]<A[j+1]) ++j;
        if(temp_first>=A[j]) break;
        A[s]=A[j];
        s=j;
    }
    A[s]=temp_first;
}

void HeapSort(int *A, int len)
{
    for(int i=len/2;i>=1;--i)
    {
        HeapAdjust(A, i, len);
    }
    int temp_first=A[1];
    A[1]=A[len];
    A[len]=temp_first;
    for(int i=len-1;i>1;--i)
    {
        HeapAdjust(A,1,i);
        temp_first=A[1];
        A[1]=A[i];
        A[i]=temp_first;
    }
}

int main()
{
    int A[]={0,2,4,6,2,45,8,5,3,8,4,6,7};
    int len=sizeof(A)/sizeof(A[0])-1;       //第一个元素是哨岗元素
    HeapSort(A,len);
    for(int i=1;i<=len;++i)
    {
        cout<<A[i]<<" ";
    }
    cout<<endl;
    return 0;
}