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;
}
代码如下:
#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(堆排序)
- Internal Sorting: Heapsort-1: Sorting by Selection
- Internal Sorting: Heapsort-2:Sorting by Selection
- heapsort
- Go语言标准库堆(heap)封装及堆排序实现
- 堆排序
- Foundation: Heapsort
- HeapSort
- 排序算法(Max_Heap_Sort最大堆排序)
- 堆排序
- 堆排序算法的实现(HeapSort)
- 堆排序算法
- 堆排序
- 215. Kth Largest Element in an Array
- 八大排序之堆排序
- 堆排序 Heap Sort
- 堆排序heapSort
- Java堆排序算法
- java 数据结构之堆排序(HeapSort)详解及实例
- python03-list_tuple_dict_set