// 堆排序
void percolateDown(int* A, int i, int N);
void HeapSort(int *A, int Len)
{
// build heap
for ( int i = Len / 2; i >= 0; --i )
{
percolateDown(A, i, Len-1);
}
// move max to the end
for (int i = Len-1; i > 0; --i )
{
int tmp = A[0];
A[0] = A[i];
percolateDown(A, 0, i);
A[i] = tmp;
}
}
void percolateDown(int* A, int i, int N)
{
int child;
int data = A[i];
for ( ; i * 2 + 1 <= N; i = child )
{
child = i * 2 + 1;
if ( child != N && A[child+1] > A[child] )
{
++child;
}
if( A[child] > data )
{
A[i] = A[child];
}
else
{
break;
}
}
A[i] = data;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布