首页 > 其他分享 >大根堆的实现

大根堆的实现

时间:2024-07-15 11:56:30浏览次数:13  
标签:大根堆 arr index 实现 int heapSize heap left

public static void swap(int[] arr , int i , int j){
    arr[i] =arr[i] ^arr[j];
    arr[j] =arr[i] ^arr[j];
    arr[i] =arr[i] ^arr[j];
}
//建一个大根堆
public static class MyMaxHeap{
    private int[] heap;
    private final int limit;
    private int heapSize;

    public MyMaxHeap(int limit){
        heap = new int[limit];
        this.limit  = limit;
        heapSize =0;
    }

    public boolean isEmpty(){
        return heapSize==0;
    }

    public boolean isFull(){
        return heapSize ==limit;
    }

    public void push(int value){
        if(heapSize == limit){
            throw new RuntimeException("heap is full");
        }
        heap[heapSize]  = value;
        heapInsert(heap ,  heapSize++);
    }

    public int pop(){
        int ans  = heap[0];
        swap(heap ,0 , --heapSize);
        heapify(heap , 0 ,heapSize);
        return ans;
    }
    //插入数据
    private void heapInsert(int[] arr , int index){
        while(arr[index]  >  arr[(index-1)/2]){
            swap(arr , index  ,(index-1)/2);
            index =  (index -1)/2;
        }
    }

    private void heapify(int[] arr ,int index ,int heapSize){
        int left =  index*2-1;
        while (left < heapSize){
         int largest = left+1 < heapSize && arr[left + 1]> arr[left] ? left +1  : left;
         largest = arr[largest] > arr[index]? largest :index;

         if(largest == index){
                break;
         }

            swap(arr ,largest , index);
            index =largest;
            left = index*2+1;
        }
    }
}

标签:大根堆,arr,index,实现,int,heapSize,heap,left
From: https://blog.csdn.net/2401_83010439/article/details/140435109

相关文章

  • 基于智能优化算法实现自动泊车的路径动态规划(Matlab代码实现)
    ......
  • 基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
    目录0引言1计及风光储能和需求响应的微电网日前经济调度模型1.1风光储能需求响应都不参与的模型1.2风光参与的模型1.3风光和储能参与模型1.4风光和需求响应参与模型1.5风光储能和需求响应都参与模型 2需求侧响应评价2.1 负载率2.2可再生能源消纳率2.3用户......
  • Java毕业设计-基于springboot开发的医院后台管理系统设计与实现-毕业论文(附毕设源代码
    https://download.csdn.net/download/u014740628/88922529医院后台管理系统设计与实现应用技术概述在信息时代背景下,医院后台管理系统的开发成为提升医疗信息处理效率的关键。本文介绍的系统采用B/S架构,结合了MySQL数据库和Java语言进行实现,确保了系统的稳定性和数据的安......
  • Java毕业设计-基于springboot开发的医院药品管理系统设计与实现-毕业论文(附毕设源代码
    Java毕业设计-基于springboot开发的医院药品管理系统设计与实现-毕业论文(附毕设源代码)https://download.csdn.net/download/u014740628/88922533医院药品管理系统开发实践应用技术概述在数字化时代背景下,医院药品管理系统的开发利用了当前流行的技术栈,以满足现代医疗行业......
  • 使用Java实现OAuth2.0认证
    使用Java实现OAuth2.0认证大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!OAuth2.0认证简介OAuth2.0是一种开放标准的授权协议,允许用户授权第三方应用访问其资源,而无需将用户名和密码提供给第三方应用。在Web开发中,OAuth2.0已经成为一种常见的认证机制,用......
  • 使用Spring Boot实现事务管理
    使用SpringBoot实现事务管理大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!SpringBoot中的事务管理在现代的企业应用程序中,事务管理是确保数据完整性和一致性的关键部分。SpringBoot框架通过其强大的事务管理机制,为开发人员提供了简单而高效的方式来......
  • 使用Java实现定时任务调度
    使用Java实现定时任务调度大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!定时任务调度的概述在软件开发中,定时任务调度是一项常见的需求,它允许开发人员周期性地执行特定的任务或操作。Java提供了多种方式来实现定时任务调度,其中包括传统的Timer类、Quar......
  • 基于java+springboot+vue实现的企业级工位管理系统(文末源码+Lw)120
    基于SpringBoot+Vue的实现的企业级工位管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+ppt+演示视频+软件包)系统功能:本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用情况管理,工位分配管理。员工可以查看个人中心,部门信息,和工位分......
  • 基于java+springboot+vue实现的共享汽车管理系统(文末源码+Lw)118
    基于SpringBoot+Vue的实现的共享汽车管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+开题报告+演示视频+软件包)系统功能:本共享汽车管理系统有管理员和用户。管理员功能有个人中心,用户管理,投放地区管理,汽车信息管理,汽车投放管理,汽车入库管理,使用订单管理,汽车归还管理。用......
  • 基于java+springboot+vue实现的中药实验管理系统(文末源码+Lw)124
     基于SpringBoot+Vue的实现的中药实验管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+开题报告+演示视频+软件包)系统功能:本中药实验管理系统有管理员,教师,学生,实验员。管理员功能有个人中心,学生管理,教师管理,实验员管理,实验教学管理,在线学习管理,实验信息管理,实验预约管......