堆排序
来源:互联网 发布:淘宝店铺卖家版 编辑:程序博客网 时间:2024/06/18 17:10
从小到大排序,建立大根堆,每次将最后一个元素与堆顶交换,此时最大元素到堆尾,堆元素-1,自上而下维护大根堆,得到的数组即从小到大
#include<iostream>using namespace std;class Heap {private: int *data, size;public: Heap(int length_input) { data = new int[length_input]; size = 0; } ~Heap() { delete[] data; } void push(int value) { data[size] = value; int current = size;//子节点 int father = (current - 1) / 2;//父节点 while (data[current] > data[father]) { swap(data[current], data[father]); current = father; father = (current - 1) / 2; } size++; } void output() { for (int i = 0; i < size; i++) { cout << data[i] << " "; } cout << endl; } int top() { return data[0]; } void update(int pos, int n) {//pos当前节点 n节点数 int lchild = 2 * pos + 1, rchild = 2 * pos + 2; int max_value = pos; if (lchild < n && data[lchild] > data[max_value]) { max_value = lchild; } if (rchild < n && data[rchild] > data[max_value]) { max_value = rchild; } if (max_value != pos) { swap(data[pos], data[max_value]); update(max_value, n); } } void pop() { swap(data[0], data[size - 1]); size--; update(0, size); } void heap_sort(){ for(int i=size-1;i>=1;i--){ swap(data[i],data[0]); update(0, i); } }};int main() { int arr[10] = { 12, 9, 30, 24, 30, 4, 55, 64, 22, 37 }; Heap heap(100); for (int i = 0; i < 10; i++) { heap.push(arr[i]); } heap.output(); heap.heap_sort(); heap.output(); return 0;}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 没有发现Activity,not found Activity
- UGUI内核大探究(十二)Slider
- ShapeFile数据到mongodb的导入
- 项目管理学习笔记
- 浅谈Android根据屏幕宽度,按比例缩放图片
- 堆排序
- 通过inAppBrowser实现浏览网页
- ListView中嵌入Button,并响应Button点击事件
- Hadoop(04) NameNode、DataNode
- [Android] Android 动画浅析
- 离散数学输入表达式打印真值表和主析/合取范式
- 单例demo
- C++11中的匿名函数指针(Lambda表达式)
- c++ primer记录