一个最大堆的实现(最基本的功能)
2013-09-05 10:47
239 查看
参考了算法导论上的堆排序算法,实现了如下最大堆(采用的数据结构为数组)。只有最基本的功能,最后利用该最大堆实现了堆排序(非递减排序)。代码如下:
max_heap_sort.h:
max_heap_sort.cpp:
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); } }
相关文章推荐
- 使用EF6和MVC5实现一个简单的选课系统--使用EF6实现基本的GRUD功能(2/12)
- 设计一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
- 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
- 实验题7.1: 编写一个程序algo7-1.cpp,实现二叉树的各种基本运算,并在此基础上设计一个程序Main.cpp完成如下功能(b为如下图所示的一棵二叉树)
- 利用字符出现的次数,编写一个方法,实现基本的字符串压缩功能。
- Rails实现一个blog项目01-基本功能blog和comment的实现
- 一、实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
- 【难】【队列】实现一个支持插入、删除和查找最大值三种功能的队列
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个stri
- 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。
- 分享一个iOS下实现基本绘画板功能的简单方法
- [JAVA]集合框架之自己实现一个具有基本增查删改功能的ArrayList
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 使用Easyjweb+Spring2+JPA 实现一个基本留言本的功能
- 用Python实现简单的HTTP服务器(2)--实现一个基本功能的HTTP服务器
- 基本字符串压缩 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 【Java】编写一个方法,实现基本的字符串压缩功能
- 用最简单的脚本完成supertab的基本功能并实现一个更加合理的功能
- 我自己编的一个c语言小程序:银行基本功能的实现
- 面试5之编写一个方法,实现基本的字符串压缩功能。