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

网站建设推广图片东莞好的网站建设公司

网站建设推广图片,东莞好的网站建设公司,建设四川网站,品牌营销策划是干嘛的堆是一个数据结构 逻辑结构:完全二叉树(要求父节点大于孩子节点或者小于孩子节点) 存储结构:顺序存储 typedef int DataType; typedef struct Heap{DataType*data;int size;int capacity; }Heap;void InitHeap(Heap*pH) {asser…

堆是一个数据结构

逻辑结构:完全二叉树(要求父节点大于孩子节点或者小于孩子节点)

存储结构:顺序存储

typedef int DataType;
typedef struct Heap{DataType*data;int size;int capacity;
}Heap;void InitHeap(Heap*pH)
{assert(pH);pH->data=NULL;pH->size=0;pH->capacity=0;
}void expand(Heap*pH)
{DataType*p=realloc(pH->a,sizeof(DataType)*(pH->capacity+2));if(p==NULL){printf("%s",strerror(errno));    }pH->data=p;pH->capacity+=2;
}void Swap(int*n1,int*n2)
{int tmp=*n1;*n1=*n2;*n2=tmp;
}void AdjustUp(Heap*pH,int child)
{while(child>0){int parent=(child-1)/2;if(data[child]<data[parent]){Swap(&data[child],&data[parent]);child=parent;}else{break;}}
}void HeapPush(Heap*pH,int n)
{assert(pH);expand(pH);pH->data[pH->size++]=n;AdjustUp(pH->data,pH->size-1);
}void AdjustDown(DataType*data,int parent,int size)
{int child=2*parent+1;while(child>n&&child+1>n){if(data[child]>data[child+1]){child+=1;}if(data[parent]>data[child]){Swap(&data[parent],&data[child]);parent=child;child=2*parent+1;}}}void HeapPop(Heap*pH)
{assert(pH->size);Swap(&pH->data[0],&pH->data[pH->size-1]);pH->size--;AdjustDown(pH->data,0,pH->size);
}

这是堆的基本操作,我们如果有一个数组,想借助堆这个数据结构利用额外的空间来实现排序,那么先依次将数据放入堆中,再依次删除并将删除的数据放入到数组中完成排序。每一次插入的时间复杂度最多都是O(logN),删除也一样,比起之前冒泡排序O(n^2)要好一些。

但是有很大的缺点,首先就是要有一个堆,每次都先这样实现堆很麻烦,还有一点是空间复杂度为O(N),有额外开辟的空间。我们可以这样做:用一个指针从左到右依次扫描数组,向上调整算法的使用前提是本身为堆,那我们从下标为1的元素开始,扫描到一个相当于插入了一个,然后用向上调整算法调整为堆,再扫描下一个+调整,扫描完最后一个元素为止。那么这个数组就是一个堆了,如果我们想升序排列,则整理为大堆,先找最大的数据放在最后,如果想降序排列就先找最小的,也就是小堆。why?如果我们排列升序,先找最小的,那么后面的元素怎么办?需要重新整理成堆,时间复杂度为N^2*logN,这比N^2的时间复杂度还要高,没必要搞这么一堆出来了,所以排升序找最大的。排成堆+交换就找出了最大的,然后排成堆+交换就找出了次大的,以此类推即可。这个做法的本质就是在一个数组上模拟堆的插入和删除,扫描增加一个就是插入,交换一次就是删除。

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

相关文章:

  • 做网站哪家南京做网站asp 网站 内容静态化
  • 怎么用自己的网站做链轮福田欧曼矿用自卸车
  • 企业网站建设原因安徽网站建设服务
  • 电子商务网站开发设计报告书平面设计培训班有用吗
  • 微商城开发优化排名
  • 医疗网站建设管理一流的上海网站建设公司
  • 购物网站前台模板app下载安装官方免费
  • 婚庆网站的设计意义做地税电子签章的网站
  • 证明做二维码打款网站链接电白建设局网站
  • 网络建站详情图上海网站建设制作百橙
  • 汕尾建设网站首页优化师
  • 网站建设时间本地58同城招聘网
  • 湖南做网站 尖端磐石网络网站备案地
  • 无锡企业制作网站注册公司费用及流程
  • 注入漏洞网站源码知名的网站设计公司
  • 做商城网站公司吗电子手表网站
  • 旅行网站开发背景建设征婚网站
  • 常州武进区建设局网站媒介代理公司排名
  • 公司网站的推广怎么做一个app的介绍
  • 企业网站硬件方面建设爱 做 网站吗
  • wordpress 资讯站Wordpress 简单 免费主题
  • 遵义做网站优化网站备案 查询
  • seo 网站网站会员注册系统源码
  • 站长工具劲爆建立自我
  • 建立网站赚钱吗济南建网站多少钱
  • 做网站找哪家好 07月h5制作软件是什么
  • 大连开发区网站开发公司电话网站服务器技术
  • 齐鲁建设网站wordpress排序优化
  • 优化免费网站建设空调维修技术支持东莞网站建设
  • 淘宝网站做阳光棚多少钱一平米百度指数功能模块有哪些