堆排序
来源:互联网 发布:淘宝网软件免费下载 编辑:程序博客网 时间:2024/06/03 15:27
利用二叉树的特性实现堆排序
#include<iostream>using namespace std;//节点从0开始所以会多1int left(int i){ return i * 2 + 1;}int right(int i){ return i * 2 + 2;}//使得节点i及其子节点都是最大堆void Max_Heapfiy(int *A, int length, int i){ int Right = right(i), Left = left(i), largest = i; if (Left < length && A[Left] > A[largest]) { largest = Left; } if (Right < length && A[Right] > A[largest]) { largest = Right; } if (largest != i) { int temp = A[i]; A[i] = A[largest]; A[largest] = temp; Max_Heapfiy(A, length, largest); }}void Build_Max_Heap(int *A, int length){ //从最后一个非叶子节点开始,到根节点,因为Max_Heapfiy调用时必须保证子节点是最大堆 for (int i = (length - 1) / 2; i >= 0; i--) { Max_Heapfiy(A, 5, i); }}void px(int *A, int length){ Build_Max_Heap(A, length); for (int i = length - 1; i >= 1; i--) { int temp = A[i]; A[i] = A[0]; A[0] = temp; Max_Heapfiy(A, i, 0); }}int main(){ int a[5] = {5,3,2,1,4}; px(a, 5); system("pause"); return 0;}
在对堆进行删除时,将对应节点值,变为最小值,然后调用Max_Heapfiy函数从新排序即可,插入则想加入一个最小值,保证原堆是最大堆,然后逐层比较节点和父节点大小,判断是否交换
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 使用curl命令操作elasticsearch And 使用http 查询ES
- php中判断某个IP地址是否存在范围内
- 在eclipse中输入.后提示解决
- 瀑布开发模式和敏捷开发模式的区别和思考
- Thinkphp3.2分页自定义样式
- 堆排序
- java中根据手机号获取手机号归属地
- 编译原理基本概念
- 记录一个go实现 etcd存取的小demo以便使用
- MYSQL性能查看命令
- Ubuntu14.04+cuda7.5+caffe+OpenCV2.4.9+cudnn7.5+Anaconda2安装配置
- React Native 环境搭建(Android端)
- Android自定义View【实战教程】4⃣️----BitmapShader详解及圆形、圆角、多边形实现
- Effective Java 2.3——用私有构造器或者枚举类型强化Singleton属性