您的位置:首页 > 其它

堆排序(Heap Sort)

2011-07-02 13:21 381 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  include null