堆排序

来源:互联网 发布: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
原创粉丝点击