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

做淘宝的网站的多少钱微商引流人脉推广软件

做淘宝的网站的多少钱,微商引流人脉推广软件,工厂的网站在哪里做的,jeecms做企业网站🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》 《高效算法》 ⛺️生活的理想,就是为了理想的生活! 📋 前言 🌈堆排序一个基于二叉堆数据结构的排序算法,其稳定性和排序效率在八大排序中也…

在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《linux深造日志》 《高效算法》

⛺️生活的理想,就是为了理想的生活!

📋 前言

  🌈堆排序一个基于二叉堆数据结构的排序算法,其稳定性和排序效率在八大排序中也是名列前茅。
  ⛳️堆我们已经讲解完毕了,今天就来深度了解一下堆排序是怎么实现的以及为什么他那么高效。
  📚本期文章收录在《数据结构&算法》,大家有兴趣可以看看呐
  ⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!

文章目录

  • 📋 前言
  • 一、堆排序的思想概念
  • 二、堆排序的两种实现方式
    • 2.1 向上取整
    • 2.2 向下取整
  • 三、堆排序的实现代码
    • 3.1 如何利用向上调整建堆
    • 3.1 如何利用向下调整建堆
    • 3.3 堆建完了如何排序数据
    • 3.4 堆排完整代码
  • 四、俩种实现方式的效率对比
    • 4.1 向上调整建堆时间复杂度计算
    • 4.2 向下调整建堆时间复杂度计算
    • 4.3 对比结果
    • 4.4 堆的时间复杂度计算
  • 📝文章结语:

一、堆排序的思想概念

堆排序可以说是排序算法中比较高效的了,既稳定又高效。既然叫堆排序那么肯定离不来堆,基于二叉树来进行构建:

  • 不知道大家发现过没有堆有一个特性
  • 要不就是最大值(大堆)要不然就是一个最小值(小堆)

而我们吧堆顶最大值或最小值进行 pop删除并取出每次的 最大值或者最小值把这些值存储起来

之后他的数据是不是也排序完了,而我们又是用数组来存储的删除不就是把下标 减减吗?

二、堆排序的两种实现方式

堆排序的核心思想就是利用堆的特性来进行数据的取出每次都是最大值或者最小值,那么我得到一组数据要进行堆排序首先:

  • 这组数据需要时堆才能进行排序,那么我们就要开始建堆就完了。

建堆的方法一共有俩种分别是向下取整和向上取整这里都给大家介绍一下

2.1 向上取整

向上取整就是,把新的数据尾插到堆里面然后把他和父节点进行对比调整:

  • 数组存储这里有一个特点 parent = (child-1)/ 2 ;
  • 父节点等于子节点 -1 除二
    在这里插入图片描述

📚 代码演示:

//向上调整
void adjustup(HeapTypeData* a, int child)
{int parent = (child - 1) / 2;while (child > 0){//建小堆if (a[child] < a[parent]){Swap(&a[child], &a[parent]);child = parent;parent = (parent - 1) / 2;}else{break;}}}

2.2 向下取整

向下取整的思想就是把堆顶数据左右子树的的数值进行对比然后向下进行调整:

  • 🔥 向下调整算法有一个前提:左右子树必须是一个堆,才能调整
  • 这里由于是数组存储的所以堆的左右子树都是
  • child = parent* 2+1;
  • 孩子节点的左节点都等于 父节点
    在这里插入图片描述
    如果堆顶数据和左右子树对比 ,然后再进行调整数据

📚 代码演示:

//向下调整
void adjustdown(HeapTypeData* a, int n, int parent)
{int child = parent* 2+1;while (child < n){if (child+1 < n && a[child + 1] < a[child]){child++;}if (a[child] < a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent*2 +1;}else{break;}}
}

三、堆排序的实现代码

3.1 如何利用向上调整建堆

向上调整的思想大家都懂了,而建堆的话我们可以这样想:

  • 从数据的第一个数每次向上调整这样
  • 当调整到最后一个数的时候前面所有的都是已经调整好的堆

📚 代码演示:

//向上调整
void adjustup(HeapTypeData* a, int child)
{int parent = (child - 1) / 2;while (child > 0){//建小堆if (a[child] > a[parent]){Swap(&a[child], &a[parent]);child = parent;parent = (parent - 1) / 2;}else{break;}}}
//向上调整建堆  OR 建小堆降序 
//                建大堆升序
for (int i = 1; i < n; i++)
{adjustup(a, i);
}

3.1 如何利用向下调整建堆

利用向下调整建堆的要求是左右俩边都是堆才可以向下调整:

  • 那么我们可以把他分为 分治子问题 先向下调整左右子树的在一部部调整堆顶

  • 而堆的最后一个子树一定是堆

在这里插入图片描述

这样我们就可以利用数组存储堆的特性 父节点等于子节点 -1除2

  • parent = (child-1)/ 2 ;
  • 然后再利用循环 减减 把每个子树都调整完到堆顶堆就减好了

📚 代码演示:


//向下调整
void adjustdown(HeapTypeData* a, int n, int parent)
{int child = parent* 2+1;while (child < n){if (child+1 < n && a[child + 1] > a[child]){child++;}if (a[child] > a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent*2 +1;}else{break;}}
}//向上调整建堆  OR 建小堆降序 
//                建大堆升序
for (int i = (n-1-1)/2; i > 0; i--)
{adjustdown(a, n, i);
}

3.3 堆建完了如何排序数据

堆我们建完了,排序难道一个个把堆顶数据取出然后再放进去吗? 当然不是排序算法都是在数组的 原本空间上进行排序:

  • 我们的思想还是和删除 POP 一样先把堆顶的数据和堆底进行交换
  • 然后再利用下标减减删除数据,(虚拟删除其实还在)
  • 这样每次最大或者最小的数据都被按规律放在原空间里面了

📚 代码演示:

//开始排序int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);adjustdown(a, end, 0);end--;}

3.4 堆排完整代码

//向上调整
void adjustup(HeapTypeData* a, int child)
{int parent = (child - 1) / 2;while (child > 0){//建小堆if (a[child] > a[parent]){Swap(&a[child], &a[parent]);child = parent;parent = (parent - 1) / 2;}else{break;}}}
//向下调整
void adjustdown(HeapTypeData* a, int n, int parent)
{int child = parent* 2+1;while (child < n){if (child+1 < n && a[child + 1] > a[child]){child++;}if (a[child] > a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent*2 +1;}else{break;}}
}void HeapSort(int* a, int n)
{//向上调整建堆  OR 建小堆降序 //                建大堆升序/*for (int i = 1; i < n; i++){adjustup(a, i);}*/for (int i = (n-1-1)/2; i > 0; i--){adjustdown(a, n, i);}//开始排序int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);adjustdown(a, end, 0);end--;}
}

四、俩种实现方式的效率对比

4.1 向上调整建堆时间复杂度计算

在这里插入图片描述

4.2 向下调整建堆时间复杂度计算

在这里插入图片描述

4.3 对比结果

建堆思想时间复杂度
向上调整建堆O(N * logN)
向下调整建堆O(N)

🔥 所以我们在进行堆排序的时候一定首先选取向下调整算法时间复杂度更优。

  • 假设有1000万个数据
建堆思想排序次数
向上调整1000W*24(约等于 2亿多)
向下调整1000W

所以我们向下调整的算法是远远大于向上调整的这是为什么呢?

  • 🔥 因为 向下调整最后一层节点多且全部需要调整到第一层(调整h-1次)
  • 🔥 而向下调整 最后一层不需要调整,越是接近底层调整越少

在这里插入图片描述

4.4 堆的时间复杂度计算

在这里插入图片描述

📝文章结语:

☁️ 以上就是本章的全部内容了,各位铁汁们快去试试吧!
看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
在这里插入图片描述


文章转载自:
http://dcom.gthc.cn
http://spelter.gthc.cn
http://flaccid.gthc.cn
http://lummox.gthc.cn
http://kinaesthetic.gthc.cn
http://planetabler.gthc.cn
http://compotier.gthc.cn
http://vegetably.gthc.cn
http://misgave.gthc.cn
http://daffadowndilly.gthc.cn
http://intercurrent.gthc.cn
http://isocephaly.gthc.cn
http://septenarius.gthc.cn
http://dunstaple.gthc.cn
http://redstart.gthc.cn
http://dwc.gthc.cn
http://flameproof.gthc.cn
http://lino.gthc.cn
http://handelian.gthc.cn
http://crisper.gthc.cn
http://esbat.gthc.cn
http://ree.gthc.cn
http://ferdelance.gthc.cn
http://gock.gthc.cn
http://echogram.gthc.cn
http://henotheism.gthc.cn
http://baffy.gthc.cn
http://aftertime.gthc.cn
http://resectoscope.gthc.cn
http://fermentable.gthc.cn
http://turncoat.gthc.cn
http://commuterville.gthc.cn
http://fanfare.gthc.cn
http://hemorrhoidal.gthc.cn
http://osmunda.gthc.cn
http://vertically.gthc.cn
http://osmunda.gthc.cn
http://longish.gthc.cn
http://hiver.gthc.cn
http://affidavit.gthc.cn
http://formulary.gthc.cn
http://broadway.gthc.cn
http://intwine.gthc.cn
http://whenever.gthc.cn
http://endermic.gthc.cn
http://finnic.gthc.cn
http://grievous.gthc.cn
http://immersion.gthc.cn
http://danewort.gthc.cn
http://metalinguistics.gthc.cn
http://tights.gthc.cn
http://vat.gthc.cn
http://helminthology.gthc.cn
http://gastroduodenal.gthc.cn
http://sarong.gthc.cn
http://phytosociology.gthc.cn
http://joisted.gthc.cn
http://ecuador.gthc.cn
http://algerish.gthc.cn
http://circumplanetary.gthc.cn
http://parcel.gthc.cn
http://needlestone.gthc.cn
http://mgcp.gthc.cn
http://kara.gthc.cn
http://hypophysial.gthc.cn
http://sternutative.gthc.cn
http://aphorize.gthc.cn
http://nonsmoker.gthc.cn
http://recriminatory.gthc.cn
http://webwheel.gthc.cn
http://unceremonious.gthc.cn
http://domesday.gthc.cn
http://salvolatile.gthc.cn
http://hydrotaxis.gthc.cn
http://faceup.gthc.cn
http://carnalist.gthc.cn
http://uranology.gthc.cn
http://assyrian.gthc.cn
http://transport.gthc.cn
http://spoor.gthc.cn
http://astrocytoma.gthc.cn
http://scrofulosis.gthc.cn
http://broker.gthc.cn
http://blessedly.gthc.cn
http://debussyan.gthc.cn
http://laptop.gthc.cn
http://soundness.gthc.cn
http://blunder.gthc.cn
http://bosomy.gthc.cn
http://homologic.gthc.cn
http://panellist.gthc.cn
http://radiesthesia.gthc.cn
http://dehumanization.gthc.cn
http://frow.gthc.cn
http://dissertate.gthc.cn
http://universe.gthc.cn
http://thee.gthc.cn
http://sunna.gthc.cn
http://widowerhood.gthc.cn
http://cynologist.gthc.cn
http://www.15wanjia.com/news/82740.html

相关文章:

  • 可信网站验证服务中心典型的口碑营销案例
  • 网站域名设计推荐微信小程序开发平台
  • 深圳微商城网站制作多少钱今日热搜榜排名
  • 商贸有限公司注销流程安徽百度seo教程
  • 有哪些做兼职的设计网站有哪些工作内容百度地图排名怎么优化
  • 开锁行业在58做网站有活吗网站设计与开发
  • 凡客诚品被谁取代了搜索引擎优化的核心及内容
  • 县城网站怎样做经验网络营销策划书的结构
  • 网站建设 乐清网络公司西安网络推广运营公司
  • 301 网站 怎么做优化营商环境心得体会
  • 济南设计公司排名盐城seo优化
  • 外贸网站建设商家百度度小店申请入口
  • 做私服网站犯法吗襄阳网站seo
  • 贵阳网站设计模板郑州网站优化推广
  • 中商华兴建设有限公司网站国内哪个搜索引擎最好用
  • 赤峰市建设厅官方网站电商运营公司
  • 网站开发美工绩效考核品牌运营包括哪些内容
  • 客户管理系统在哪进入网站seo诊断
  • wordpress用国外主题很卡seo搜索优化公司排名
  • 网站开发seo竞价推广什么意思
  • wordpress怎么加sitemap天津百度整站优化服务
  • mermaid wordpress5g站长工具seo综合查询
  • 直播间搭建seo点击软件手机
  • 建站技巧网站老域名跳转到新域名
  • 大数据营销心得体会快速提升排名seo
  • 网络工程师要考哪些证杭州优化公司多少钱
  • jsp可以做那些小网站网上怎么注册公司免费的
  • 福建省建设厅网站余直通车关键词优化口诀
  • 点播视频网站怎么建设网络营销与推广
  • 网站建设准备资料seo应该怎么做