堆排序
来源:互联网 发布:linux shell编程输入 编辑:程序博客网 时间:2024/06/05 18:59
/* * HeapSort.cpp * * Created on: 2014年3月26日 * Author: yjx */#include <iostream>#include <vector>using namespace std;class HeapSort {private:vector<int> vec;inline int parent(int i) { return i/2; };inline int leftChild(int i) { return 2*i; };inline int rightChild(int i) { return 2*i+1; };public:void init();int getHeapSize();int getValue(int i);void setValue(int i, int value);void traverse();void max_heapify(int i);void build_max_heap();void heap_sort();};void HeapSort::heap_sort() {build_max_heap();while(getHeapSize() > 1) {int temp = getValue(1);setValue(1, getValue(getHeapSize()));setValue(getHeapSize(), temp);setValue(0, getHeapSize()-1);max_heapify(1);}}void HeapSort::build_max_heap() {for (int i = getHeapSize()/2; i > 0; i--) {max_heapify(i);}}void HeapSort::max_heapify(int i) {int largest = i;int left = leftChild(i);int right = rightChild(i);if (left <= getHeapSize() && getValue(largest) < getValue(left)) {largest = left;}if (right <= getHeapSize() && getValue(largest) < getValue(right)) {largest = right;}if (largest != i) {int temp = getValue(i);setValue(i, getValue(largest));setValue(largest, temp);max_heapify(largest);}}void HeapSort::traverse() {for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++) {std::cout << *iter << std::endl;}}void HeapSort::setValue(int i, int value) {vector<int>::iterator iter = vec.begin();*(iter+i) = value;}int HeapSort::getValue(int i) {vector<int>::iterator iter = vec.begin();return *(iter+i);}int HeapSort::getHeapSize() {return getValue(0);}void HeapSort::init() {std::cout << "how many elements do you want to enter: ";int count;std::cin >> count;vec.push_back(count);int element;for (int i = 0; i < count; i++) {std::cin >> element;vec.push_back(element);}}int main() {HeapSort *ms = new HeapSort();ms->init();std::cout << "heap size: " << ms->getHeapSize() << std::endl;ms->heap_sort();ms->traverse();delete ms;}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- mtk 72平台四合一芯片配置相关
- 嵌入式 AT命令常用小结
- java面试笔试题大汇总
- apt-get 命令详解
- Tomcat优化配置
- 堆排序
- 剑指offer:顺时针打印数组
- [ACM] hdu 2149 Public Sale (巴什博奕)
- suse11 安装 apache 记录
- 刘有生演讲录:崇俭结婚
- ArcGIS10.1下32位和64位引发问题解决方案
- Javascript、CSS、HTML面试题
- 《黑马程序员》 银行业务调度系统回顾
- 千万并发的秘密-内核是问题的根本