void maxHeap(int a[], int n, int i)
{
int left = i * 2, right = i * 2 + 1;
if(left > n)
return;
int large = left;
if(right <= n && a[right] > a[large])
large = right;
if(a[i] < a[large])
{
swap(a[i], a[large]);
maxHeap(a, n, large);
}
}
void createHeap(int a[], int n)
{
int i;
for(i = n / 2; i >= 1; i--)
maxHeap(a, n, i);
}
void heapSort(int a[], int n)
{
int i;
createHeap(a, n);
for(i = n; i >= 2; i--)
{
swap(a[i], a[1]);
maxHeap(a, i - 1, 1);
}
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布