当前位置: 首页 > news >正文

网站关键词标签知网回应被罚: 诚恳接受

网站关键词标签,知网回应被罚: 诚恳接受,建设厅网站查询,百度搜索关键词排名优化技术我们 之前写过根据 堆排序的优先级队列,但是如果我们想要建立一个堆怎么办呢? 如何实现上浮 下潜 具体看这篇文章 堆排序-优先级队列-CSDN博客 建堆 我们有两种方法建立一个堆 1.我们基于add方法建立一个堆,一次次的add,然后对…

我们 之前写过根据 堆排序的优先级队列,但是如果我们想要建立一个堆怎么办呢? 如何实现上浮 下潜 具体看这篇文章

堆排序-优先级队列-CSDN博客

建堆

我们有两种方法建立一个堆

1.我们基于add方法建立一个堆,一次次的add,然后对元素进行一次次的上浮操作,达成堆排序

2. 直接基于一个现成的数组建立一个堆,然后我们根据这个现成的数组进行建立堆

基于这两种方法我们提供了两个构造方法

堆排序的实现

我们直接把堆中的元素根据删除原理进行排序 就能实现把一个堆进行排序了

就比如  把最大的也就是堆顶的元素 跟最小的元素交换 然后下潜,一直重复这个操作,直到最小的元素在数组的索引0位置即可

下面来看完整源码

package heap.maxheap;import java.util.Arrays;public class MaxHeap {int[] array;//堆数组int size;//元素个数public MaxHeap(int capacity) {array = new int[capacity];}public MaxHeap(int[] arr) {array = arr;size = array.length;heap();}/*** 建堆方法*/private void heap() {//建堆 需要找到 叶子节点的父节点(最后一个元素)的索引位置 父节点//从父节点 开始 依次进行建堆操作//值得注意的是    我们建堆 找到的 是元素的索引位置// 是根据 arr.length 也就是size 来进行 寻找的//我们找到 叶子节点、父节点的索引位置 也就是下潜操作中 是根据 索引位置来寻找的for (int i = size / 2 - 1; i >= 0; i--) {down(i);}}private void down(int parent) {int left = parent * 2 + 1;int right = left + 1;int max = parent;while (true) {if (left < size && array[left] > array[max]) {max = left;}if (right < size && array[right] > array[max]) {max = right;}if (max == parent) {break;}swap(parent, max);parent = max;left = parent * 2 + 1;right = left + 1;}}public void up(int index) {int child = index;int parent = (child - 1) / 2;//继续上浮的条件应该是  父节点 变成根节点while (parent >= 0) {if (array[parent] < array[child]) {swap(parent, child);child = parent;parent = (child - 1) / 2;}else {break;}}}public Boolean add(int element) {if (size == array.length) {return false;}array[size] = element;up(size);size++;return true;}/*** @return int* 删除堆顶的元素* 删除元素的时候 数组查找删除比较慢 我们直接* 把数组尾部 跟 堆顶的元素 交换删除 然后下潜*/public int poll() {//此处应有非空判断我不想写了if(size==0){throw new IllegalArgumentException("元素为0 无法删除");}int temp = array[0];swap(0, size - 1);size--;down(0);return temp;}/*** @param index 要删除 指定元素的索引* @return int*/public int poll(int index) {if (index < 0 || index > size - 1) {throw  new IllegalArgumentException("索引位置错误");}int i = array[index];array[index]=-1;swap(index,size-1);size--;down(index);return i ;}private void swap(int i, int j) {int temp = array[i];array[i] = array[j];array[j] = temp;}//堆排序   怎么实现堆排序  我们只需要 拿到堆顶的最大的元素 就行了public void heapSort(){while(size>1) {swap(0,size-1);size--;down(0);}System.out.println(Arrays.toString(array));}}

测试案例 如下

package heap.maxheap;import java.util.Arrays;public class MaxHeapTest {public static void main(String[] args) {MaxHeap maxHeap = new MaxHeap(5);maxHeap.add(1);maxHeap.add(3);maxHeap.add(6);maxHeap.add(5);maxHeap.add(2);int[] array = maxHeap.array;System.out.println(Arrays.toString(array));System.out.println("--------------");int[] ints = {1,2,3,4,5,6,7};MaxHeap maxHeap1 = new MaxHeap(ints);System.out.println(Arrays.toString(maxHeap1.array));int poll1 = maxHeap1.poll(0);System.out.println(Arrays.toString(maxHeap1.array));maxHeap1.heapSort();}
}

测试结果如下

http://www.yayakq.cn/news/578944/

相关文章:

  • 网站建设要用到哪些应用工具企业解决方案搞笑
  • 网站开发汇报商务网站的主要存在形式
  • 如何链接自己做的网站做海报的网站知乎
  • 淘客网站建设视频注册公司网站需要多少钱
  • 设计手机网站软件wordpress分类关键词
  • 网站建设教程网哪个好主题网站开发介绍
  • 昆明学校网站设计公司在线图片修改
  • 知识产权教育网站建设网站管理怎么做
  • 做百度网站费用多少合适设计方案汇报
  • 洪梅镇网站仿做wordpress最好的博客主题
  • 丽水专业的网站建设企业融资计划
  • 公司网站怎么建立需要多少钱在网站挂广告一个月多少钱
  • 教学网站系统流程图济南搜索引擎优化网站
  • 网站建站查询长沙企业模板建站
  • 视频网站建设费用明细大学生html网页设计作业
  • 信誉好的扬中网站建设汕头第一网 e京网
  • 投资项目网站建设方案外贸英语学习网站
  • 做网站湘潭小型企业网络营销方案
  • 百度竞价找谁做网站惠州企业网站建设选哪家
  • 网站备案密码有什么用品牌logo图片设计制作
  • 网站后台上次图片秦皇岛做网站公司有哪些
  • 通过门户网站做单点登录SAPwordpress %link
  • 免费搭建个人业务网站网站设计与网站建设
  • 建网站公司汽车六万公里是否累变速箱油wordpress做企业官网
  • 有没有做任务一样的网站兼职网上装修公司网站策划书
  • 做网站最好的工具郑州网站建设推广报价
  • 在线免费解答网站怎么建wordpress 优化插件
  • 网站建设需要了解哪些方面网站开发按几年摊销
  • 网站建设 天台wordpress做登录界面
  • 网站开发及建设赔偿条款24小时在线地址失效域名