堆排序
2017-10-16 19:21
106 查看
#include <iostream> using namespace std; void maxHeapify(int *a,int i,int size) //调整成最大堆堆 { int lchild=2*i; //i的左孩子节点序号 int rchild=2*i+1; //i的右孩子节点序号 int max=i; //临时变量 if(i<=size/2) //如果i不是叶节点就不用进行调整 { if(lchild<=size&&a[lchild]>a[max]) { max=lchild; } if(rchild<=size&&a[rchild]>a[max]) { max=rchild; } if(max!=i) { swap(a[i],a[max]); maxHeapify(a,max,size); //避免调整之后以max为父节点的子树不是堆 } } } void BuildHeap(int *a,int size) //建立堆 { int i; for(i=size/2;i>=1;i--) //非叶节点最大序号值为size/2 { maxHeapify(a,i,size); //调整成最大堆堆 } } void HeapSort(int *a,int size) //堆排序 { int i; BuildHeap(a,size); for(i=size;i>=1;i--) { swap(a[1],a[i]); //交换堆顶和最后一个元素,即每次将剩余元素中的最大者放到最后面 //BuildHeap(a,i-1); //将余下元素重新建立为大顶堆 maxHeapify(a,1,i-1); //重新调整堆顶节点成为大顶堆 } } int main() { int a[100]; int size; cin>>size; // 数组大小 int i; for(i=1;i<=size;i++) cin>>a[i]; HeapSort(a,size); // 调用堆排序函数 for(i=1;i<=size;i++) cout<<a[i]<<" "; cout<<endl; return 0; }
相关文章推荐
- 堆排序
- 算法导论 之 堆排序[C语言]
- Sort-堆排序
- 选择排序——堆排序
- 堆排序
- 使用堆排序对一组随机数进行排序
- 数据结构-堆排序
- 经典排序算法 - 堆排序Heap sort
- 算法导论6.4-4 所有元素均不相同时,最好情况下,堆排序复杂度为Ω(nlgn)
- 冒泡排序,快速排序,归并排序,选择排序,插入排序,堆排序
- python算法--堆排序详细实现
- 堆的构建与堆排序
- 排序算法总结4-堆排序
- 【算法导论】堆排序
- 关于堆排序建堆时间以及堆排序的分析之暑假学习记录
- heapsort堆排序(3种语言实现 c/java/python)
- 排序之堆排序
- 排序算法c语言描述---堆排序
- 算法导论6:堆排序
- 排序算法之堆排序(二)