您的位置:首页 > 其它

堆排序算法

2011-10-22 15:21 211 查看
#include <string.h>
#include <stdio.h>

void Swap(int * a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}

void Heapify(int * a, int start, int end)
{
int index;
if (2 * start + 2 <= end) {
index = a[2 * start + 1] > a[2 * start + 2] ? (2 * start + 1) : (2 * start + 2);
if (a[index] > a[start]) {
Swap(a, index, start);
Heapify(a, index, end);
}
} else if (2 * start + 1 == end) {
if (a[2 * start + 1] == a[start]) {
Swap(a, 2 * start + 1, start);
}
}
}

void HeapSort(int * a, int n)
{
int i;
for (i = (n - 1) / 2; i >= 0; --i) {
Heapify(a, i, n - 1);
}
for (i = n - 1; i >= 1; --i) {
Swap(a, i, 0);
Heapify(a, 0, i - 1);
}
}

void Print(int * a, int n)
{
int i;
for (i = 0; i < n; ++i) {
printf("%3d", a[i]);
}
printf("\n");
}

int main()
{
int a[10] = {1, 9, 8, 7, 3, 5, 6, 2, 0, 4};
Print(a, 10);
HeapSort(a, 10);
Print(a, 10);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: