一个最大堆的实现(最基本的功能)

来源:互联网 发布:数据库考试试题及答案 编辑:程序博客网 时间:2024/06/02 05:58

参考了算法导论上的堆排序算法,实现了如下最大堆(采用的数据结构为数组)。只有最基本的功能,最后利用该最大堆实现了堆排序(非递减排序)。代码如下:

max_heap_sort.h:

#define PARENT(i) ((i - 1)/2)#define LEFT(i) (2*i + 1)#define RIGHT(i) (2*i + 2)void max_heapify(vector<int> & vec_ints, int heap_size, int i);void build_max_heap(vector<int> & vec_ints, int heap_size);void max_heap_sort(vector<int> & vec_ints);

max_heap_sort.cpp:

void max_heapify(vector<int> & vec_ints, int heap_size, int i){int largest = -1;int l = LEFT(i);int r = RIGHT(i);if (l < heap_size && vec_ints[l] > vec_ints[i]){largest = l;} else{largest = i;}if (r < heap_size && vec_ints[r] > vec_ints[largest]){largest = r;}if (largest != i){swap(vec_ints[i], vec_ints[largest]);max_heapify(vec_ints, heap_size, largest);}}void build_max_heap(vector<int> & vec_ints, int heap_size){int s = PARENT(heap_size - 1);for (int i = s; i >=0; i--){max_heapify(vec_ints, heap_size, i);}}void max_heap_sort(vector<int> & vec_ints){int heap_size = vec_ints.size();build_max_heap(vec_ints, heap_size);for (int i = vec_ints.size() - 1; i > 0; i--){swap(vec_ints[i], vec_ints[0]);heap_size--;max_heapify(vec_ints, heap_size, 0);}}