C++ 堆排序算法实现

来源:互联网 发布:windows微信机器人 编辑:程序博客网 时间:2024/06/14 03:24

C++ 堆排序函数实现如下:

void heap_sort(vector<int> &data) {    for (int i = (int)data.size() / 2; i >= 0; i--) {        heap_adjust(data, i, (int)data.size());    }    for (int i = (int)data.size() - 1; i > 0; i--) {        swap(data[0], data[i]);        heap_adjust(data, 0, i);    }}void heap_adjust(vector<int> &data, int e, int length) {    int child;    for(;2 * e + 1 < length; e = child) {        child = 2 * e + 1;        if(child < length - 1 && data[child + 1] > data[child]) {            child++;        }        if(data[e] < data[child]) {            swap(data[e], data[child]);        } else {            break;        }    }}

完整代码如下(包含main函数,头文件,测试数组):

#include <iostream>#include <vector>using namespace std;//函数声明void output_array(vector<int> &data);   //输出void heap_sort(vector<int> &data);void heap_adjust(vector<int> &data, int e, int length);void heap_sort(vector<int> &data) {    for (int i = (int)data.size() / 2; i >= 0; i--) {        heap_adjust(data, i, (int)data.size());    }    for (int i = (int)data.size() - 1; i > 0; i--) {        swap(data[0], data[i]);        heap_adjust(data, 0, i);    }}void heap_adjust(vector<int> &data, int e, int length) {    int child;    for(;2 * e + 1 < length; e = child) {        child = 2 * e + 1;        if(child < length - 1 && data[child + 1] > data[child]) {            child++;        }        if(data[e] < data[child]) {            swap(data[e], data[child]);        } else {            break;        }    }}void output_array(vector<int> &data) {    for(auto i : data) {        cout << i << " ";    }    cout << endl;}int main() {    int _data[] = {2, 4, 6, 0, 9, 8};    vector<int> data(_data, _data + 6);    heap_sort(data);    output_array(data);    return 0;}
0 0