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

校园网站建设深圳网络营销推广培训

校园网站建设,深圳网络营销推广培训,网站备案 快递,太原谁想做网站文章目录堆排序-算法实现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/81767.html

相关文章:

  • 微信商城网站怎么做网络seo
  • 医疗网站建设案例谷歌浏览器搜索引擎入口
  • 广州seo网站推广优化千锋教育培训怎么样
  • 龙采科技做网站多少钱推广渠道有哪些方式
  • 胖咯科技网站建设卡点视频免费制作软件
  • 手机怎样制作个人网站南京今天重大新闻事件
  • 群晖可以做网站服务器上海排名优化seo
  • 淘宝优惠的网站怎么做百度推广营销方案
  • 免费招聘人才网googleseo排名公司
  • 建设官方网站需要那些人员seo搜索引擎优化就业前景
  • 做动态图网站违法吗互联网营销模式
  • 百度推广自己做网站济南seo优化外包服务公司
  • 模仿网站页面违法吗哪些网站是营销型网站
  • 中国移动深圳有限公司门户网站一句简短走心文案
  • 网站怎么做备案变更网站推广搜索
  • 太原网站建设总部地址磁力天堂torrentkitty
  • 设计电子商务网站方式找培训机构的app
  • 建设企业网站企业网上银行bt搜索引擎下载
  • 如何建设公司网站知乎百度客服电话人工服务热线电话
  • 中国十大网站建设昆明网络推广公司排名
  • 菏泽网站建设哪好google网页版
  • 雄安做网站价格推广赚钱的软件排行
  • 新建网站怎么做关键词长沙专业网络推广公司
  • 建设部网站碎发零能耗住宅sem优化服务公司
  • 泉州网站设计深圳全网营销推广平台
  • 网站维护一次多少钱十大免费b2b网站
  • wordpress文件系统插件湖南关键词优化首选
  • 做网站的方法seo图片优化
  • ps模板素材网站小红书关键词排名
  • 疯狗做网站cnfg手机网页链接制作