源代码:
#include <stdio.h>
int right(int i);
int left(int i);
int parent(int i);
void max_heapify(int arr[], int i, int len);
void heap_sort(int arr[], int len);
void build_max_heap(int arr[], int len);
void print_elem(int arr[], int len);
void swap(int arr[], int i, int j);
void main(void)
{
int array[9] = {4, 1, 3, 2, 16, 9, 10, 14, 8};
heap_sort(array, 9);
print_elem(array, 9);
}
int right(int i)
{
return 2*i+1;
}
int left(int i)
{
return 2*i;
}
int parent(int i)
{
return i/2;
}
void max_heapify(int arr[], int i, int len)
{
int largest = 0;
int l = left(i);
int r = right(i);
if ((l <= len) && (arr[l-1] > arr[i-1]))
largest = l;
else
largest = i;
if ((r <= len) && (arr[r-1] > arr[largest-1]))
largest = r;
if (largest != i)
{
swap(arr, largest, i);
max_heapify(arr, largest, len);
}
}
void build_max_heap(int arr[], int len)
{
int i;
for (i = len/2; i >=1; i--)
max_heapify(arr, i, len);
}
void heap_sort(int arr[], int len)
{
int i;
build_max_heap(arr, len);
for (i = len; i >= 2; i--)
{
swap(arr, 1, i);
len--;
max_heapify(arr, 1, len);
}
}
void print_elem(int arr[], int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void swap(int arr[], int i, int j)
{
int temp;
temp = arr[i-1];
arr[i-1] = arr[j-1];
arr[j-1] = temp;
}