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

设计师接单平台网站网站制作公司网站

设计师接单平台网站,网站制作公司网站,网页设计与制作06386自考真题,手机兼职在哪个网站做我们 之前写过根据 堆排序的优先级队列,但是如果我们想要建立一个堆怎么办呢? 如何实现上浮 下潜 具体看这篇文章 堆排序-优先级队列-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.hkea.cn/news/937984/

相关文章:

  • 网站运营配置免费网站在线观看人数在哪直播
  • 什么网站做一手房好系统优化的例子
  • wordpress 插入wordseo排名点击工具
  • 网站推广易网宣seo的主要分析工具
  • 安徽网站定制最大免费广告发布平台
  • 怎么查网站有没有做404公司宣传网页怎么做
  • 靠谱营销网站开发选哪家seo的优点和缺点
  • 企业网站建设论文文献综述百度推广的广告真实可信吗
  • 企业网站优化方式广州最新消息今天
  • 旅游网站开发的意义seo优化方案案例
  • 山东做网站的公司seo数据分析哪些方面
  • 做网站用哪几个端口 比较好百度贴吧官网网页
  • 弹幕网站是怎么做的百度在线翻译
  • 独立网站域名代发关键词包收录
  • 如何建立门户网站百度可以发布广告吗
  • 网站开发毕设文献郑州网站优化顾问
  • 青海建设银行的官方网站自己制作网页的网站
  • 网站建设的图片叠加步骤过程2021年搜索引擎排名
  • 网站链接到邮箱怎么做搜索引擎推广试题
  • 十堰城市建设网站制作自己的网站
  • 传媒网站建设公司深圳百度seo优化
  • 公司需要网站 该怎么做公司推广咨询
  • 高中男女做那个视频网站seo做的好的网站
  • 网站建设 摄影服务上海seo网站排名优化公司
  • 网页设计中html代码seo博客网站
  • 怎样建设小游戏网站google关键词搜索技巧
  • 淘宝 客要推广网站怎么做全媒体广告代理
  • 那个b2b网站可以做外贸武汉全网推广
  • 深圳css3网站开发多少钱如何策划一个营销方案
  • 织梦统计网站访问量代码网络营销公司如何建立