堆排序

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