堆排序c++代码

堆排序c++代码,第1张

排序c++代码

堆排序

从第一个非叶子节点开始建立大顶堆,然后与堆顶进行交换,重新进行再调整

class Solution
{
public:
    //第二个参数表示剩余未排序数字的数量即堆的大小
    void makeHeap(vector &arr,int heapSize ,int index)
    {
        int left = 2 * index + 1;//左节点
        int right = 2 * index + 2;//右节点
        int maxIndex = index;
        if (left arr[maxIndex])
        {
            maxIndex = left;
        }

        if (right arr[maxIndex])
        {
            maxIndex = right;
        }
        if(maxIndex!=index)
        {
            swap(arr[index], arr[maxIndex]);
            makeHeap(arr, heapSize,maxIndex);
        }
    }
    void heapSort(vector &arr)
    {
        int n = arr.size();
        //初始化堆 从最后一个非叶子节点开始建堆,最后一个非叶子节点就是n/2-1
        for (int i = n / 2 - 1; i >= 0;i--)
        {
            makeHeap(arr, n,i);
        }
        for (int i = n - 1; i > 0;i--)
        {
            //将最大值交换到数组最后
            swap(arr[i], arr[0]);
            //调整剩余数组,使其满足大顶堆
            makeHeap(arr, i,0);
        }
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5503731.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存