堆排序

来源:互联网 发布:网络层有哪些功能 编辑:程序博客网 时间:2024/06/05 23:51
// 调整指定结点void adjust_heap(vector<int> &arr, int i, int size) //最大堆{    int parrent = i, child = 2 * i + 1, val = arr[parrent];    // 寻找val的最终位置    while (child < size)    {        if (child + 1 < size && arr[child] < arr[child + 1])            child += 1;        if (arr[parrent] < arr[child])        {            swap(arr[parrent], arr[child]);            parrent = child;            child = 2 * parrent + 1;        }        else            break;    }    arr[parrent] = val;}// 调整数组,使其符合堆结构void make_heap(vector<int> &arr){    for (int i = arr.size() / 2; i >= 0; i--)        adjust_heap(arr, i, arr.size());}// 堆排序void sort_heap(vector<int> &arr){    for (int i = arr.size() - 1; i >= 0; i--)    {        swap(arr[i], arr[0]);        adjust_heap(arr, 0, i);    }}void print(vector<int> &arr){    for (int i = 0; i < arr.size(); i++)        cout << arr[i] << " ";    cout << endl;}int main(){    vector<int> arr = { 1, 3, 4, 5, 2, 6, 9, 7, 8, 0 };    print(arr);    make_heap(arr);    print(arr);    sort_heap(arr);    print(arr);}
原创粉丝点击