#include <stdio.h>
void swap (int* a, int* b) {*a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b;}
int parent(int i) {return (i - 1) / 2;}
int left (int i) {return 2 * i + 1;}
int right (int i) {return 2 * i + 2;}
void maxHeapify (int A[], int i, int heapSize)
{
int l = left(i), r = right(i), largest;
if ( (l < heapSize) && (A[l] > A[i]) )
largest = l;
else
largest = i;
if ( (r < heapSize) && (A[r] > A[largest]) )
largest = r;
if (largest != i) {
swap(&A[i], &A[largest]);
maxHeapify (A, largest, heapSize);
}
}
void buildMaxHeap (int A[], int heapSize)
{
int i;
for (i = (heapSize - 1) / 2; i >= 0; --i)
maxHeapify(A, i, heapSize);
}
void heapSort(int A[], int heapSize)
{
int i;
buildMaxHeap(A, heapSize);
for (i = heapSize - 1; i > 0; --i)
{
swap(&A[0], &A[i]);
--heapSize;
maxHeapify(A, 0, heapSize);
}
}
main()
{
int i;
int A[] = {8, 7, 3, 16, 10, 9, 14, 2, 1, 4};
int size = sizeof(A) / sizeof(int);
printf("Before heapSort: ");
for (i = 0; i < size; ++i)
printf("%2d ", A[i]);
printf("\n");
heapSort(A, size);
printf("After heapSort: ");
for (i = 0; i < size; ++i)
printf("%2d ", A[i]);
printf("\n");
}
Heap-Sort
最新推荐文章于 2021-08-04 22:19:22 发布