#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
void maxHeapify(int *arr, int i, int size)
{
int l = (i + 1) * 2 - 1;
int r = (i + 1) * 2;
int largest, t;
if (l + 1 <= size && arr[l] > arr[i])
largest = l;
else
largest = i;
if (r + 1 <= size && arr[r] > arr[largest])
largest = r;
if (largest != i)
{
t = arr[i];
arr[i] = arr[largest];
arr[largest] = t;
maxHeapify(arr, largest, size);
}
}
void buildMaxHeap(int *arr, int size)
{
int i;
for (i = size / 2 - 1; i >= 0; i--)
maxHeapify(arr, i, size);
}
void heapSort(int *arr, int size)
{
buildMaxHeap(arr, size);
int i, t;
for (i = size - 1; i >= 1; i--)
{ i = size - 1;
t = arr[0];
arr[0] = arr[i];
arr[i] = t;
size--;
maxHeapify(arr, 0, size);
}
}
int main(int argc, const char *argv[])
{
int arr[MAX];
int i;
srand((unsigned)time(NULL));
for (i = 0; i < MAX; i++)
arr[i] = rand() % MAX;
printf("original array :");
for (i = 0; i < sizeof(arr) / sizeof(int); i++)
printf("%d ", arr[i]);
printf("\n");
heapSort(arr, sizeof(arr) / sizeof(int));
printf("sorted array :");
for (i = 0; i < sizeof(arr) / sizeof(int); i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
堆排序(Heap Sort)
最新推荐文章于 2022-08-08 15:57:26 发布