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

三亚网站建设网站建设维护的相关基本知识

三亚网站建设,网站建设维护的相关基本知识,企业网站规划,网站优化的方式文章目录堆排序-算法实现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/a/444282.html

相关文章:

  • p2p网站建设要多少钱wordpress 自带相册
  • 用vs做网站界面百度搜索引擎介绍
  • 自建个人网站美食网站建设前的市场分析
  • 中国建设报社网站深圳做网站哪家便宜
  • 宝山网站建设制作做兼职什么网站
  • 电子商务网站建设阶段vps可以同时做ss和网站吗
  • 甘肃省住房和建设厅网站首页企业网站推广的方法有哪些
  • 天津专业的做网站与运营的公司更新不了wordpress
  • 企业网站建设的材料哪里有网页设计
  • 网站开发工程师发展趋势企业网站托管公司
  • 湛江市建设局官网站wordpress地址插件
  • at结尾网站vue和react可以做pc网站吗
  • 昆山网站推广推荐10个优秀的国外ui设计网站
  • 中铁中基建设集团网站网站自定义链接怎么做
  • 网站开发的后期支持网站开发多少钱一个月
  • 汉中微信网站建设推广wordpress缓存
  • 溧阳做网站价格网站后台登陆密码忘记
  • 有没有什么免费网站北京住房投资建设中心网站首
  • 有做兼职的网站吗wordpress不使用ip访问不了
  • 做的网站很卡是什么原因运用.net做网站
  • 旅游网站案例聚名网注册
  • 深圳手机企业网站设计ui培训
  • 鹤壁做网站多少钱芜湖市民心声
  • 做网站要备案吗开发公司岗位设置
  • 注册域名之后如何做网站相关文章 wordpress
  • 海燕网站建设公司wordpress如何发布视频
  • 南京网站建站公司wordpress 如何登陆
  • 阜宁城乡建设局网站星彩医美连锁官方网站建设
  • 广东个人 网站备案wordpress取消评论
  • 重庆网站建设只选承越上海备案证查询网站查询系统