• 堆排序


    #include<iostream>
    #include<vector>
    using namespace std;
     
    // 递归方式构建大根堆(len是arr的长度,index是第一个非叶子节点的下标)
    void adjust(vector<int> &arr, int len, int index)
    {
        int left = 2*index + 1; // index的左子节点
        int right = 2*index + 2;// index的右子节点
     
        int maxIdx = index;
        if(left<len && arr[left] > arr[maxIdx])     maxIdx = left;
        if(right<len && arr[right] > arr[maxIdx])     maxIdx = right;
     
        if(maxIdx != index)
        {
            swap(arr[maxIdx], arr[index]);
            adjust(arr, len, maxIdx);
        }
     
    }
     
    // 堆排序
    void heapSort(vector<int> &arr, int size)
    {
        // 构建大根堆(从最后一个非叶子节点向上)
        for(int i=size/2 - 1; i >= 0; i--)
        {
            adjust(arr, size, i);
        }
     
        // 调整大根堆
        for(int i = size - 1; i >= 1; i--)
        {
            swap(arr[0], arr[i]);           // 将当前最大的放置到数组末尾
            adjust(arr, i, 0);              // 将未完成排序的部分继续进行堆排序
        }
    }
     
    int main()
    {
        vector<int> arr = {8, 1, 14, 3, 21, 5, 7, 10};
        heapSort(arr, arr.size());
        for(int i=0;i<arr.size();i++)
        {
            cout<<arr[i]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    docker应用
    docker 安装--2
    docker容器--1
    oracle表可以跨操作系统文件,也可以跨表空间(分区表即可)
    linux 上的 oracle问题
    ftp默认是按ASCII模式传输文件
    5、Jmeter动态随机参数
    4、Jmeter请求参数
    的撒
    3、Jmeter断言
  • 原文地址:https://www.cnblogs.com/stepping/p/15293066.html
Copyright © 2020-2023  润新知