堆排序(最大堆)
2014-12-04 18:45
204 查看
#include "iostream.h" using namespace std; //因为i从0开始 #define LeftChild(i) (2*(i)+1) //i-N范围内,创建最大堆 void maxHeap(int A[], int i, int N){ int tmp; int child; for(tmp=A[i];LeftChild(i)<N;i=child){ child = LeftChild(i); if(child!=N-1&&A[child+1]>A[child]){ child++; } if(tmp<A[child]){ A[i]=A[child]; }else break; } A[i]=tmp; } void HeapSort(int A[], int N){ //因为2*i不超过N,所以i从N/2开始 for(int i=N/2;i>=0;i--){ maxHeap(A,i,N); } for(int i=N-1;i>0;i--){ //A[0]是最大堆的最大值,通过交换,把堆的最大值置于队尾 swap(A[0],A[i]); //重建最大堆 maxHeap(A,0,i); } } int main(int argc, char *argv[]) { int N; cin>>N; int A[100]; for(int i=0;i<N;i++){ cin>>A[i]; } HeapSort(A,N); for(int i=0;i<N;i++){ cout<<A[i]<<" "; } cout<<endl; return 0; }
相关文章推荐
- 最大堆排序
- 最大堆及堆排序的实现
- 堆排序查找前N个最大数和二分查找算法
- 堆排序------最大堆进行排序为例
- 计算机算法--最大堆实现堆排序(从大到小输出)
- 算法之堆排序(最大堆c++实现)
- 排序算法_堆排序(最大堆、最小堆)
- 最大的K个数—堆排序
- 堆排序原理及算法实现(最大堆)
- 第6章 堆排序 java实现 简单版 泛型版 最大优先级队列
- 最大堆排序
- 最大堆、最小堆、堆排序
- 写正确函数需要注意的地方:最大堆的创建与堆排序
- 最大堆的建立和堆排序
- 最大堆和利用堆排序
- 堆排序(最大堆)
- c++实现最大堆建立(链表结构)和堆排序
- 堆排序原理及算法实现(最大堆)
- 为什么从5000个数中找出10个最大的堆排序最快?
- 堆排序与第K小数最大顶堆