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

网站建设南京seo搜狗

网站建设南京,seo搜狗,那个软件可以做三个视频网站,在闲鱼可以做网站吗文章目录堆排序-算法实现1. 向上调整和向下调整比较2. 堆排序1. 升序2. 降序堆排序-算法实现 前面介绍了堆的基本功能实现(https://blog.csdn.net/m0_46343224/article/details/127986662),了解了堆,这里用堆实现排序 1. 向上调整和向下调整比较 思考&a…

文章目录

  • 堆排序-算法实现
    • 1. 向上调整和向下调整比较
    • 2. 堆排序
      • 1. 升序
      • 2. 降序

堆排序-算法实现

前面介绍了堆的基本功能实现(https://blog.csdn.net/m0_46343224/article/details/127986662),了解了堆,这里用堆实现排序

1. 向上调整和向下调整比较

思考:向上调整和向下调整哪个更优?

此图解析:向上调整的时间复杂度:O(N*log2(N));向下调整的时间复杂度:O(N);则从尾向下调整优于向上调整

2. 堆排序

堆排序思路:

升序:首先建大堆,然后交换首尾数据(也就是把最大的数据放在尾部,再从头向下调整size-1个数据(也就是不对其交换后的最大的数据调整)

降序:首先建小堆,然后交换首尾数据(也就是把最大的数据放在尾部,再从头向下调整size-1个数据(也就是不对其交换后的最大的数据调整)

1. 升序

void SwapData(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}void AdjustDownSortAscending(int* a, int size, int parent)
{//假设默认左孩子大int lchild = parent * 2 + 1;while (lchild < size){//确认指向大的孩子if (lchild + 1 < size && a[lchild + 1] > a[lchild]){++lchild;}//大堆//lchild + 1 < size 表示最后的父节点和左孩子对比if (a[parent] < a[lchild]){SwapData(&a[parent], &a[lchild]);parent = lchild;lchild = parent * 2 + 1;}else{break;}}
}void HeapSortAscending(int* a, int size)
{//建大堆(从尾元素父节点开始)for (int i = (size - 1 - 1) / 2; i >= 0; --i){AdjustDownSortAscending(a, size, i);}int heapend = size - 1;while (heapend > 0){SwapData(&a[0], &a[heapend]);//从首开始向下调整AdjustDownSortAscending(a, heapend, 0);heapend--;}
}

2. 降序

void SwapData(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}void AdjustDownSortDescending(int* a, int size, int parent)
{//假设默认左孩子大int lchild = parent * 2 + 1;while (lchild < size){//确认指向大的孩子if (lchild + 1 < size && a[lchild + 1] < a[lchild]){++lchild;}//大堆//lchild + 1 < size 表示最后的父节点和左孩子对比if (a[parent] > a[lchild]){SwapData(&a[parent], &a[lchild]);parent = lchild;lchild = parent * 2 + 1;}else{break;}}
}void HeapSortDescending(int* a, int size)
{//建小堆(从尾元素父节点开始)for (int i = (size - 1 - 1) / 2; i >= 0; --i){AdjustDownSortDescending(a, size,i);}int heapend = size - 1;while (heapend > 0){SwapData(&a[0], &a[heapend]);//从首开始向下调整AdjustDownSortDescending(a, heapend, 0);heapend--;}
}

为什么升序建立大堆,降序建立小堆?

我们知道大堆小堆都不是连续递减或递增的,拿升序来说:如果建立小堆,那么我们不一定数据连续递增的情况时,这样就增加的时间复杂度,本来可以在O(N*log2(N))时间解决,但是这里不连续递增,就要对没有连续递增的位置上再次调整。降序建立大堆也是一样提高了不必的时间成本

http://www.dtcms.com/wzjs/224292.html

相关文章:

  • 怎么看网站有没有被收录上海seo公司排名
  • 乐山市建设局网站百度卖货平台
  • wordpress script网络seo排名
  • 做视频网站需要流量软文的概念是什么
  • 大气学校网站模板长沙网站托管seo优化公司
  • 网站建设undefined百度信息流效果怎么样
  • 创同盟做网站营销推广方式
  • 简述网站设计要遵循哪些原则网络媒体
  • 网站未备案可以做经营活动吗经典的软文广告
  • 单页面 网站怎么做的做百度推广多少钱
  • 做网站支持提现支付宝舆情信息在哪里找
  • 做一个网站需要怎么做免费优化网站
  • 网站建设网站网站建设网站加拿大搜索引擎
  • 怎么做网站推广临沂哈尔滨企业网站模板建站
  • 网站推广广告词seo关键词有话要多少钱
  • 做众筹的网站有几个北京网站优化方案
  • 用ppt做网站方法广州seo公司排名
  • 昆明app制作公司电话长春网站优化方案
  • 三级分销网站建设沈阳关键字优化公司
  • 广州企业网站seo百度站长工具网站
  • 最权威的做网站设计哪家好黑科技引流推广神器
  • 给网站加织梦后台品牌推广的方式
  • wordpress网站加cnzz百度seo点击
  • 株洲做网站百度直播推广
  • 中国企业信用网网站的seo如何优化
  • 怎么0成本做网站广告推广赚钱
  • 一流的郑州网站建设站长seo查询工具
  • 网站上的产品五星怎样做优化公司网站免费建站
  • 龙华做网站公司市场营销八大营销模式
  • wordpress文章无法访问专业seo排名优化费用