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

深圳网站开发网站杭州上城区抖音seo有多好

深圳网站开发网站,杭州上城区抖音seo有多好,杭州 高端网站建设,网站开发设计合同数据结构 | 堆排序 文章目录 数据结构 | 堆排序建立大堆排序结果以及全部代码 如果没有看过堆的实现的话可以先看前面的一章堆的实现,然后再来看这个堆排序,都是比较简单的~~ 这里堆排序首先建堆,建堆是要建小堆还是大堆呢? 在堆排…

数据结构 | 堆排序

文章目录

  • 数据结构 | 堆排序
      • 建立大堆
      • 排序
      • 结果以及全部代码

如果没有看过堆的实现的话可以先看前面的一章堆的实现,然后再来看这个堆排序,都是比较简单的~~

  • 这里堆排序首先建堆,建堆是要建小堆还是大堆呢?
  • 在堆排序算法中,建立大顶堆的过程是为了确保堆的根节点是整个堆中最大的元素。
    当你需要进行升序排序时,你希望最大的元素排在序列的最后
  • 堆排序的基本思想是首先将待排序的序列构建成一个大顶堆,然后将堆顶元素(最大元素)与堆的最后一个元素交换,接着对剩余的元素重新构建大顶堆,然后再次交换堆顶元素与堆的最后一个元素,如此往复,直到整个序列有序。
  • 建立大顶堆的目的是为了每次交换后,将最大的元素沉到序列的末尾,逐步形成有序的序列。如果你希望升序排序,建立大顶堆是符合这一目标的。

建立大堆

void Swap(HPDataType* p1, HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}
void AdjustUp_Big(HPDataType* a, int child)
{int parent = (child - 1) / 2;while (child > 0){if (a[child] > a[parent]){Swap(&a[child], &a[parent]);child = parent;parent = (child - 1) / 2;}else{break;}}
}

测试一下:

int a[] = { 4,6,2,1,5,8,2,9 };
int sz = sizeof(a) / sizeof(a[0]);
for (int i = 1; i < sz; i++)
{AdjustUp_Big(a, i);
}

排序

void AdjustDown_Big(HPDataType* a, int size, int parent)
{int child = parent * 2 + 1;while (child < size){if (child + 1 < size && a[child + 1] > a[child])++child;if (a[child] > a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}

在这里插入图片描述

//end是在最后一个元素的下标-1
int end = sz - 1;
while (end > 0)
{//根和最后一个值进行交换,最后一个数不看做堆里面的Swap(&a[0], &a[end]);AdjustDown_Big(a, end, 0);--end;
}

结果以及全部代码

void Swap(HPDataType* p1, HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}
void AdjustUp_Big(HPDataType* a, int child)
{int parent = (child - 1) / 2;while (child > 0){if (a[child] > a[parent]){Swap(&a[child], &a[parent]);child = parent;parent = (child - 1) / 2;}else{break;}}
}
void AdjustDown_Big(HPDataType* a, int size, int parent)
{int child = parent * 2 + 1;while (child < size){if (child + 1 < size && 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[] = { 4,6,2,1,5,8,2,9 };int sz = sizeof(a) / sizeof(a[0]);/*for (int i = 1; i < sz; i++){AdjustUp_Big(a, i);}*///向下调整建堆,这样效率更高,上面那个也可以for (int i = (sz - 1 - 1)/2; i >= 0; --i){AdjustDown_Big(a, sz, i);}//打印printf("排序前:");for (int i = 0; i < sz; i++){printf("%d ", a[i]);}printf("\n");//排序//end是在最后一个元素的下标-1int end = sz - 1;while (end > 0){//根和最后一个值进行交换,最后一个数不看做堆里面的Swap(&a[0], &a[end]);AdjustDown_Big(a, end, 0);--end;}//打印printf("排序后:");for (int i = 0; i < sz; i++){printf("%d ", a[i]);}
}

在这里插入图片描述

http://www.15wanjia.com/news/40277.html

相关文章:

  • 掌上乌鲁木齐app下载seo免费优化网站
  • wordpress插件获取数据库google 优化推广
  • 万网站长it菜鸡网seo
  • 刚做的网站怎么才能搜索到windows优化软件
  • 郑州做网站九零后百度竞价是什么意思
  • 房山住房和城乡建设委员会网站找客户的十大方法
  • 网站开发工程师的经验网络营销策略存在的问题
  • 用pageadmin做的网站用什么虚拟主机号怎么找需要推广的商家
  • 河源定制网站建设推广手机建站
  • 菜鸟制作个人网站网页实例域名排名查询
  • 什么网站可以做时间加减app开发流程
  • 广州网站建设怎么做营销推广方案
  • 做网站开麻烦吗网站怎么推广
  • 日本一级做a在线播放免费视频网站网络促销的方法有哪些
  • 做网站的市场有那么大吗北京seo相关
  • 广州公司注册网站官网网络营销渠道的特点
  • 网站头图设计关键词排名点击软件工具
  • 网页突然打不开是什么原因郑州推广优化公司
  • 开平做网站西安百度推广代理商
  • 社区网站搭建怎么在百度推广自己的网站
  • 广州荔湾做网站品牌营销策划包括哪些内容
  • 自己做免费手机网站吗北京网站推广
  • wordpress主题 付费百度关键词优化系统
  • 广西建设教育协会网站视频营销的策略与方法
  • 做汽车特卖会的网站网上的推广
  • 做公司网站协议书模板下载百度在线使用网页版
  • 做网站总结体会南宁网络推广外包
  • 什么是纯动态网站google国际版
  • 网站建设做哪 个会计科目百度页面
  • dw网站指向邮箱超链接怎么做国外媒体报道