排序算法----堆排序
2014-05-29 00:00
92 查看
堆排序算法使用二叉堆实现排序,树上的每一个节点对应数组中的一个元素。
第一步:使用MAX_HEAPIFY维护一个最大堆(所有孩子节点都必须小于或等于其父节点)。它的输入为一个数组A和一下标i,调用MAX_HEAPIFY时,假设节点i的左右子树都是最大堆。
View Code
第一步:使用MAX_HEAPIFY维护一个最大堆(所有孩子节点都必须小于或等于其父节点)。它的输入为一个数组A和一下标i,调用MAX_HEAPIFY时,假设节点i的左右子树都是最大堆。
#define LEFT(i) (2 * (i + 1) - 1) #define RIGHT(i) (2 * (i + 1)) #define EXCHANGE(a,b) (a) = (a) + (b);\ (b) = (a) - (b);\ (a) = (a) - (b) void MAX_HEAPIFY(int A[],int i,int heap_size) { int l = LEFT(i); int r = RIGHT(i); int largest = -1; if(l <= heap_size && A[l] > A[i]) { largest = l; } else { largest = i; } if(r <= heap_size && A[r] > A[largest]) { largest = r; } if(largest != i) { EXCHANGE(A[i],A[largest]); MAX_HEAPIFY(A,largest,heap_size); } } void BUILD_MAX_HEAP(int A[],int heap_size) { for(int i = heap_size / 2;i >=0;--i) { MAX_HEAPIFY(A,i,heap_size); } } //堆排序,T(n) = O(nlgn) void HEAPSORT(int A[],int heap_size) { BUILD_MAX_HEAP(A,heap_size); for(int i = heap_size;i > 0;--i) { EXCHANGE(A[heap_size],A[0]); heap_size -= 1; MAX_HEAPIFY(A,0,heap_size); } }
View Code
相关文章推荐
- 排序算法(归并排序, 快速排序, 堆排序)
- 排序算法-堆排序
- 排序算法之堆排序
- 改进排序算法:堆排序(对简单选择排序的改进)
- 排序算法:堆排序
- 排序算法4-堆排序
- 排序算法之堆排序(二)
- 排序算法--堆排序
- 排序算法——堆排序
- 排序算法整理(5)堆排序
- Java排序算法总结(六):堆排序
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- 基本排序算法--堆排序
- 【排序算法】——堆排序
- 排序算法系列-堆排序-快速排序-基数排序-简单选择排序-归并排序
- 数据结构之排序算法二:堆排序,快速排序,归并排序
- 常见排序算法:堆排序
- 排序算法之堆排序(c++)
- 排序算法:堆排序
- 常用排序算法C++实现(堆排序,快速排序,归并排序,基数排序)