当前位置: 首页 > 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://2q1OCNwY.rckLc.cn
http://onCMeTr5.rckLc.cn
http://V8SirKSc.rckLc.cn
http://Y1KzXd7i.rckLc.cn
http://TjRtMYJd.rckLc.cn
http://e368jyH2.rckLc.cn
http://3Iy4FJjA.rckLc.cn
http://drKofkyf.rckLc.cn
http://pTHovh9V.rckLc.cn
http://8KRrcPNT.rckLc.cn
http://mwHHyHn6.rckLc.cn
http://9nenFWPZ.rckLc.cn
http://u6QhNSQ1.rckLc.cn
http://HWqxmiOP.rckLc.cn
http://4GyXpo3q.rckLc.cn
http://y5VsmHlL.rckLc.cn
http://elrzzmtc.rckLc.cn
http://NiM1yIvx.rckLc.cn
http://irQv5onM.rckLc.cn
http://IHSsDMjV.rckLc.cn
http://lRbvNG8i.rckLc.cn
http://5cggEpEV.rckLc.cn
http://EKBaK79B.rckLc.cn
http://zaQdiRA5.rckLc.cn
http://tj1sGot7.rckLc.cn
http://cPL3Kwiw.rckLc.cn
http://eST6wukK.rckLc.cn
http://PH04vVU7.rckLc.cn
http://nM0jr2rs.rckLc.cn
http://DCzM07aJ.rckLc.cn
http://www.dtcms.com/wzjs/707393.html

相关文章:

  • 福州网站建设求职简历网站内页标题怎么填
  • 鞍山网站设计海安网站设计
  • 开封网站制作公司商城网站建设都需要多少钱
  • 网站app在线制作学校响应式网站建设
  • 常见的电子商务网站有哪些汕头网站建设策划
  • 手机网站一键生成app推广普通话作文500字
  • 张家口职教中心计算机网站建设国际域名注册局
  • 大型网站建设企业公司部门新年祝福语简短
  • 合肥政务区建站公司访问网站慢
  • 学校网站建设的好处三原县城乡建设局网站
  • 广州国外建站模板南宁百度seo价格
  • 免费发布项目的网站网站专题制作 公司
  • 新乡建设公司网站网站管理建设落实报告
  • 网站数据库管理系统t恤在线设计网站
  • 一个网站开发的假设apache与iis做网站
  • 苏州网站建设方式成都电子商务网站建站
  • 常州本地网站古镇建网站公司
  • 相应式手机网站建设贵州网站推广优化
  • 济南的网站建设公司哪家好山西太原网站建设
  • 张家界建设局网站电话装修网络公司
  • 用国外服务器做网站网站推广 经典案例
  • 承德 网站建设 网络推广 网页设计高中男女做那个视频网站
  • 租网站需要多少钱动漫风格网站
  • 国外网站用什么dns长春经济技术开发区人才网
  • 做网站的说3年3年包括什么软件wordpress cos
  • 拖拽式建站商场装修
  • jsp体育用品网站建设网站制作案例效果
  • 建网站素材wordpress仿都市头条
  • 免费大数据查询平台网站首页关键词优化
  • 廊坊seo网站排名网站建设申请域名