堆排序
来源:互联网 发布:java开发实战宝典 编辑:程序博客网 时间:2024/05/16 05:33
#include <iostream>#include <vector>using namespace std;template<typename Dtype>class dui{public: void insert(Dtype in); Dtype pop(); void check(int i); void output_data(); void check_up_down(int i);private: vector<Dtype> data;};template<typename Dtype>void dui<Dtype>::check_up_down(int i){ int size = data.size(); if(2*i > size){ return; }else{ if(2*i+1 > size){ if(data[i-1]>data[2*i-1]){ return; }else{ Dtype temp = data[i-1]; data[i-1] = data[2*i-1]; data[2*i-1] = temp; check_up_down(2*i); } }else{ if(data[i-1]>data[2*i-1] && data[i-1]>data[2*i]){ return; }else{ if(data[2*i-1] > data[2*i]){ Dtype temp = data[i-1]; data[i-1] = data[2*i-1]; data[2*i-1] = temp; check_up_down(2*i); }else{ Dtype temp = data[i-1]; data[i-1] = data[2*i]; data[2*i] = temp; check_up_down(2*i+1); } } } }}template<typename Dtype>Dtype dui<Dtype>::pop(){ if(data.size() == 0){ cout << "can't pop up data" << endl; }else{ cout << "max=" << data[0] << endl; data[0] = data[data.size()-1]; check_up_down(1); data.erase(data.end()-1); }}template<typename Dtype>void dui<Dtype>::output_data(){ for(int i = 0; i < data.size(); ++i){ cout << data[i] << " "; } cout << endl;}template<typename Dtype>void dui<Dtype>::insert(Dtype in){ data.push_back(in); check(data.size());}template<typename Dtype>void dui<Dtype>::check(int i){ if(i == 1) return; else{ if(i%2 == 0){ if(i+1 <= data.size()){ if(data[i/2-1]>data[i-1] && data[i/2-1]>data[i]){ return; }else{ if(data[i-1]>data[i]){ Dtype temp = data[i/2-1]; data[i/2-1] = data[i-1]; data[i-1] = temp; check(i/2); }else{ Dtype temp = data[i/2-1]; data[i/2-1] = data[i]; data[i] = temp; check(i/2); } } }else{ if(data[i/2-1]>data[i-1]) return; else{ Dtype temp = data[i/2-1]; data[i/2-1] = data[i-1]; data[i-1] = temp; check(i/2); } } }else{ if(data[i/2-1]>data[i-1] && data[i/2-1]>data[i-2]){ return; }else{ if(data[i-1]>data[i-2]){ Dtype temp = data[i/2-1]; data[i/2-1] = data[i-1]; data[i-1] = temp; check(i/2); }else{ Dtype temp = data[i/2-1]; data[i/2-1] = data[i-2]; data[i-2] = temp; check(i/2); } } } }}int main(){ dui<int> a; a.insert(5); a.insert(6); a.insert(4); a.insert(7); a.insert(0); a.insert(3); a.insert(1); a.insert(2); a.insert(9); a.insert(8); a.insert(10); a.insert(11); a.output_data(); for(int i = 0; i < 20; ++i){ a.pop(); } return 1;}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Error listening on: (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) TNS-12545: Connect failed because tar
- activemq-cpp-library在VS2015下的编译
- 第九周项目3-稀疏矩阵的三元组表示的应用(2)
- tomcat启动时间修改
- Python脚本报错AttributeError: ‘module’ object has no attribute ’urllibopen'(Python 2.7.11 )
- 堆排序
- ROC和AUC在python中metrics上的实现
- springMVC中Validation介绍--很详细
- python学习笔记使用list和tuple
- linux忘记root密码的解决方法
- 地址总线与数据总线
- iOS9、XCoder8下PCH文件设置
- 搜狗手机手机副本
- 中国软件开发者大会十三大主题