您的位置:首页 > 编程语言

heapsort实现代码

2016-05-15 02:23 197 查看
根据 CLRS里的算法实现。

代码如下:

#include <stdlib.h>
#include <string.h>

#define PARENT(index) ((index)/2)
#define LEFT(index) (2*(index))
#define RIGHT(index) (2*(index)+1)

#define MAX_LENGTH 100
struct heap
{
int data[MAX_LENGTH];
int size;
int length;
};

void max_heapify(struct heap *h, int i)
{
int left = LEFT(i);
int right = RIGHT(i);

int largest = i;
if(left <= h->size && h->data[left] > h->data[largest])
{
largest = left;
}

if(right <= h->size && h->data[right] > h->data[largest])
{
largest = right;
}

if(largest != i)
{
int tmp = h->data[i];
h->data[i] = h->data[largest];
h->data[largest] = tmp;
max_heapify(h, largest);
}
}

void build_max_heap(struct heap *h)
{
h->size = h->length;

int i = h->length / 2;

while(i >= 1)
{
max_heapify(h, i);
i--;
}
}

void heapsort(struct heap *h)
{
build_max_heap(h);

while(h->size >= 2)
{
int tmp = h->data[1];
h->data[1] = h->data[h->size];
h->data[h->size] = tmp;

h->size--;

max_heapify(h, 1);
}
}

int main(int argc, char **argv)
{
struct heap h;

memset(&h, 0, sizeof(h));
int i;
for(i = 0; i < 50; i++)
{
h.data[i + 1] = rand() %1000;
}

h.length = 50;
h.size = 0;

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