- 8
- 0
- 约 10页
- 2016-12-25 发布于河南
- 举报
编程题:
编程实现堆排序
/*
堆排序思想:
首先把数组看成是一个无序的堆结构,然后首先把数组构建成大根堆,及所有父节点不小于他的两个子节点。
构建的大根堆的特点是顶点值一定不小于所有子节点的值。
然后把大根堆的顶点,也就是数组第一个元素值和堆的尾节点值交换。
这样最大值就一定最后面。尾节点之前的堆结构就失去大根堆特性了,然后需要重新构建大根堆(除了尾节点以外,因为尾节点已经有顺序了,为最大值)
然后再次交换顶点和倒数第二个堆节点的值,然后再重构大根堆(除堆结尾已经交换过的值)。
重复上面步骤,直到只有最顶层的堆节点,这时候整个堆结构为一个递增的数组序列(虽然堆已经不是大根堆了)。
整个算法的核心就是构建大根堆(heap_ex函数实现),其中要注意堆节点和数组键,堆节点从1开始,数组键从0开始。
整个堆排序代码如下:
*/
#include stdio.h
void swap(int *a, int *b);
void print_arr(int *arr, int arr_len);
void heap_build(int *arr, int note, int arr_len);
void heap_sort(int *arr, int note, int arr_len);
void heap_ex(int *arr, int i, int arr_end);
int
ma
原创力文档

文档评论(0)