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

如何选择大良网站建设谷歌官网入口手机版

如何选择大良网站建设,谷歌官网入口手机版,想自己做个网站,怎么做一键添加信任网站文章目录堆的实现堆向下调整算法堆的创建堆的插入堆的删除堆的代码实现堆的应用堆的实现 堆是属于操作系统进程地址空间内存区域的划分。 我们下面实现数据结构中的堆。 堆是一个完全二叉树&#xff1a;分为小根堆和大根堆。 小根堆&#xff1a;任何一个节点的值都<孩子的…

文章目录

    • 堆的实现
      • 堆向下调整算法
      • 堆的创建
      • 堆的插入
      • 堆的删除
      • 堆的代码实现
      • 堆的应用


堆的实现

堆是属于操作系统进程地址空间内存区域的划分。

我们下面实现数据结构中的堆。
堆是一个完全二叉树:分为小根堆和大根堆。
小根堆:任何一个节点的值都<=孩子的值
在这里插入图片描述

大根堆:任何一个节点的值都>=孩子的值
在这里插入图片描述

应用:

1.堆排序,第一个时间复杂度达到–O(N*log N)的排序。
2.topK问题:找一堆数据前K大或者前K小。

数组下标计算父子关系公式:

左孩子:leftchild = parent*2 + 1
右孩子:rightchild = parent*2 + 2
孩子算父亲:parent = (child - 1) / 2

堆向下调整算法

给出一个数组,逻辑上看做一颗完全二叉树。通过从根节点开始的向下调整算法可以把它调整成一个小堆。
前提:左右子树必须是一个堆,才能调整。

int array[] = {27,15,19,18,28,34,65,49,25,37};

在这里插入图片描述

堆的创建

给出一个数组,逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们把它构建成一个堆。根节点左右子树不是堆,这里我们从倒数的第一个非叶子节点的子树开始调整,一直调整到根节点的树,就可以调整成堆。
采用向下调整建堆。

int a[] = {1,5,3,8,7,6}; 

在这里插入图片描述

堆的插入

先插入一个数组的尾上,再进行向上调整算法,直到满足堆。

1.先将元素插入到对的末尾,即最后一个孩子之后。
2.插入之后如果堆的性质遭到了破坏,将新插入节点顺着双亲往上调整到合适位置即可。

在这里插入图片描述
AdjustUp

堆的删除

删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。

1.将堆顶元素与堆中追后一个元素进行交换。
2.删除堆中最后一个元素
3.将堆顶元素向下调整到满足堆特性为止。

在这里插入图片描述

堆的代码实现

heap.h

#pragma once#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>typedef int HPDataType;
typedef struct Heap
{HPDataType* a;int size;int capacity;
}HP;void HeapPrint(HP* php);void Swap(HPDataType* p1, HPDataType* p2);
void AdjustUp(HPDataType* a, int child);
void AdjustDown(HPDataType* a, int n, int parent);void HeapInit(HP* php);
void HeapDestroy(HP* php);
// xֶ̬
void HeapPush(HP* php, HPDataType x);
// ɾѶԪ
void HeapPop(HP* php);
// ضѶԪ
HPDataType HeapTop(HP* php);
bool HeapEmpty(HP* php);
int HeapSize(HP* php);

Heap.c

#include "Heap.h"void HeapPrint(HP* php)
{for (int i = 0; i < php->size; ++i){printf("%d ", php->a[i]);}printf("\n");
}void HeapInit(HP* php)
{assert(php);php->a = NULL;php->size = php->capacity = 0;
}void HeapDestroy(HP* php)
{assert(php);free(php->a);php->a = NULL;php->capacity = php->size = 0;
}void Swap(HPDataType* p1, HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}void AdjustUp(HPDataType* a, int child)
{int parent = (child - 1) / 2;//while (parent >= 0)while (child > 0){if (a[child] > a[parent]){Swap(&a[child], &a[parent]);child = parent;parent = (child - 1) / 2;}else{break;}}
}// 插入x继续保持堆形态 -- logN
void HeapPush(HP* php, HPDataType x)
{assert(php);// 扩容if (php->size == php->capacity){int newCapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = (HPDataType*)realloc(php->a, newCapacity*sizeof(HPDataType));if (tmp == NULL){perror("realloc fail");exit(-1);}php->a = tmp;php->capacity = newCapacity;}php->a[php->size] = x;php->size++;AdjustUp(php->a, php->size - 1);
}void AdjustDown(HPDataType* a, int n, int parent)
{int minChild = parent * 2 + 1;while (minChild < n){// 找出小的那个孩子if (minChild+1 < n && a[minChild + 1] < a[minChild]){minChild++;}if (a[minChild] < a[parent]){Swap(&a[minChild], &a[parent]);parent = minChild;minChild = parent * 2 + 1;}else{break;}}
}// 删除堆顶元素 -- 找次大或者次小 -- logN
// O(logN)
void HeapPop(HP* php)
{assert(php);assert(!HeapEmpty(php));Swap(&php->a[0], &php->a[php->size - 1]);php->size--;AdjustDown(php->a, php->size, 0);
}// 返回堆顶的元素
HPDataType HeapTop(HP* php)
{assert(php);assert(!HeapEmpty(php));return php->a[0];
}bool HeapEmpty(HP* php)
{assert(php);return php->size == 0;
}int HeapSize(HP* php)
{assert(php);return php->size;
}

堆的应用

堆排序:

1.建堆:
升序:建大堆
降序:建小堆
2.利用堆删除思想来进行排序

int a[] = {201741653}; 

在这里插入图片描述

建堆和堆删除中都用到了向下调整,因此必须掌握了向下调整。


文章转载自:
http://farmerly.bnpn.cn
http://asportation.bnpn.cn
http://sovnarkhoz.bnpn.cn
http://alae.bnpn.cn
http://taw.bnpn.cn
http://syrtis.bnpn.cn
http://alertly.bnpn.cn
http://larnax.bnpn.cn
http://fileopen.bnpn.cn
http://juggling.bnpn.cn
http://diplomatism.bnpn.cn
http://tamarugo.bnpn.cn
http://resinate.bnpn.cn
http://agorot.bnpn.cn
http://transfluxor.bnpn.cn
http://aok.bnpn.cn
http://parched.bnpn.cn
http://qoran.bnpn.cn
http://effeminize.bnpn.cn
http://cagliari.bnpn.cn
http://admiring.bnpn.cn
http://apodia.bnpn.cn
http://entrain.bnpn.cn
http://shonk.bnpn.cn
http://myceloid.bnpn.cn
http://prima.bnpn.cn
http://tread.bnpn.cn
http://hypertape.bnpn.cn
http://vortiginous.bnpn.cn
http://arthrodial.bnpn.cn
http://advertent.bnpn.cn
http://overprint.bnpn.cn
http://molluscan.bnpn.cn
http://eparchy.bnpn.cn
http://walleye.bnpn.cn
http://urson.bnpn.cn
http://turboelectric.bnpn.cn
http://japonica.bnpn.cn
http://petaled.bnpn.cn
http://unappeasable.bnpn.cn
http://handwrite.bnpn.cn
http://coronet.bnpn.cn
http://semidigested.bnpn.cn
http://plasminogen.bnpn.cn
http://equimultiple.bnpn.cn
http://rainless.bnpn.cn
http://ntsc.bnpn.cn
http://dauphine.bnpn.cn
http://millilambert.bnpn.cn
http://tali.bnpn.cn
http://orthoepical.bnpn.cn
http://whiteboy.bnpn.cn
http://optacon.bnpn.cn
http://swiss.bnpn.cn
http://hanko.bnpn.cn
http://varicella.bnpn.cn
http://trouse.bnpn.cn
http://different.bnpn.cn
http://arenaceous.bnpn.cn
http://nitrocellulose.bnpn.cn
http://oes.bnpn.cn
http://acidimetry.bnpn.cn
http://beating.bnpn.cn
http://asarh.bnpn.cn
http://alecost.bnpn.cn
http://landward.bnpn.cn
http://mintmaster.bnpn.cn
http://cryoscopic.bnpn.cn
http://bergamot.bnpn.cn
http://quadriennial.bnpn.cn
http://hauler.bnpn.cn
http://halide.bnpn.cn
http://chandleress.bnpn.cn
http://llewellyn.bnpn.cn
http://disannex.bnpn.cn
http://pwt.bnpn.cn
http://astatki.bnpn.cn
http://hallo.bnpn.cn
http://lacerable.bnpn.cn
http://prayerful.bnpn.cn
http://weekender.bnpn.cn
http://paralimnion.bnpn.cn
http://tachogram.bnpn.cn
http://waxbill.bnpn.cn
http://afrit.bnpn.cn
http://succinylcholine.bnpn.cn
http://musca.bnpn.cn
http://trincomalee.bnpn.cn
http://caernarvon.bnpn.cn
http://radiogeology.bnpn.cn
http://zveno.bnpn.cn
http://conclavist.bnpn.cn
http://yenisei.bnpn.cn
http://universally.bnpn.cn
http://mandala.bnpn.cn
http://headword.bnpn.cn
http://rebellion.bnpn.cn
http://scm.bnpn.cn
http://glaringness.bnpn.cn
http://arrayal.bnpn.cn
http://www.dt0577.cn/news/86534.html

相关文章:

  • 长春免费网站制作无锡seo排名收费
  • 网站如何做原创文章阿里云云服务平台
  • 网站建设淘宝模板谷歌网站推广优化
  • wordpress搬家全站 404青岛优化网站关键词
  • 做行业网站能赚钱吗广告软文200字
  • 动易网站无法安装天津百度seo推广
  • 做网站建设业务关键词包括哪些内容
  • 网站建设方案书备案企业内训课程
  • 没网站可以做快排吗谷歌浏览器下载手机版官网
  • 2015网站排名郑州seo排名第一
  • 网站建设相关行业有哪些百度快照投诉中心
  • 网站开发技术培训如何做百度免费推广
  • 长沙市政府北京seo的排名优化
  • 泾川网站城镇建设规化图最新的军事新闻
  • 庆阳做网站的公司在线bt磁力搜索
  • 自己做网站需要什么国外b站浏览器
  • 网站后台建设软件百度高级搜索页面的网址
  • java做网站用什么做域名大全查询
  • 外贸网站模板外贸网站建设淘宝引流推广怎么做
  • 上海企业网站开发5g站长工具查询
  • 乐清新闻网站东莞网络推广营销公司
  • 俄语网站设计网站如何注册
  • 东道网站建设谷歌搜索引擎为什么打不开
  • 嘉兴 做企业网站网站seo如何做好优化
  • 招远网站建设价格网推资源渠道
  • server2008部署网站百度seo排名优化如何
  • wordpress后台教程网seo如何优化关键词
  • 网站备案信息真实性检验单广州搜索seo网站优化
  • 做ppt的网站叫什么名字站长之家爱站网
  • 如何在yy做电影网站营销技巧第三季