算法堆排序记录

【算法】排序算法之堆排序 - 知乎

应用场景:获取第n个大或者小的数

操作步骤:

1、将数组构造成堆

2、调整根节点为最大堆

->倒序对每个根节点执行最大化

->根节点最大化过程中如果发生交换,需要保证子节点也为最大堆(执行最大堆)

java 复制代码
class Solution {
    public int findKthLargest(int[] nums, int k) {
        int heapSize = nums.length;
        buildMaxHeap(nums, heapSize);
        for (int i = nums.length - 1; i >= nums.length - k + 1; --i) {
            swap(nums, 0, i);
            --heapSize;
            maxHeapify(nums, 0, heapSize);
        }
        return nums[0];
    }

    public void buildMaxHeap(int[] a, int heapSize) {
        for (int i = heapSize / 2 - 1; i >= 0; --i) {
            maxHeapify(a, i, heapSize);
        } 
    }

    public void maxHeapify(int[] a, int i, int heapSize) {
        int l = i * 2 + 1, r = i * 2 + 2, largest = i;
        if (l < heapSize && a[l] > a[largest]) {
            largest = l;
        } 
        if (r < heapSize && a[r] > a[largest]) {
            largest = r;
        }
        if (largest != i) {
            swap(a, i, largest);
            maxHeapify(a, largest, heapSize);
        }
    }

    public void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}
相关推荐
weixin_429630263 分钟前
第6章 支持向量机
算法·机器学习·支持向量机
SweetCode3 分钟前
C++ 实现大数加法
开发语言·c++·算法
王哈哈^_^5 分钟前
【数据集】【YOLO】【目标检测】共享单车数据集,共享单车识别数据集 3596 张,YOLO自行车识别算法实战训推教程。
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
CodeWizard~1 小时前
AtCoder Beginner Contest 430赛后补题
c++·算法·图论
大大dxy大大1 小时前
机器学习-KNN算法示例
人工智能·算法·机器学习
zz0723202 小时前
数据结构 —— 栈
数据结构
关于不上作者榜就原神启动那件事2 小时前
模拟算法乒乓球
开发语言·c++·算法
Madison-No72 小时前
【C++】关于list的使用&&底层实现
数据结构·c++·stl·list·模拟实现
Bug退退退1232 小时前
ArrayList 与 LinkedList 的区别
java·数据结构·算法
88号技师3 小时前
2025年7月一区SCI优化算法-Logistic-Gauss Circle optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法