c++和Python哪个好(c++)

技术C++如何实现堆排序这篇文章主要介绍“C++如何实现堆排序”,在日常操作中,相信很多人在C++如何实现堆排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++如何实现堆排序”的疑惑有

本文主要介绍“C如何实现堆排序”。在日常操作中,相信很多人对C如何实现堆排序有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“C如何实现堆排序”的疑惑!接下来,请和边肖一起学习!

概述:

堆排序是利用构建“堆”的方法,确定取值最大的数据元素,并与最后一个位置的元素进行元素交换。可以根据(a1,a2,An)从左到右形成与序列对应的完整二叉树。

完全二叉树是堆的当且仅当完全二叉树的每个子树的根值AI其左子树的根值a2i,AI其右子树的根值a2i 1(1 in/2)。

堆排序有两个问题需要解决:

如何从一个无序的序列构建一个堆?输出堆的顶部元素后,如何将剩余的元素调整到新的堆中?00-1010堆排序算法的思路:1。从最后一个非叶子节点到根,逐步调整每个子树的堆。

2.重复下面的处理n-1次:用最后一片叶子交换堆的根,剩下除最后一片叶子以外的部分调整到堆里。

调整堆算法的思路:1。交换其左右子树根值最大的根;(大顶桩)

2.对交换的左(或右)子树重复过程1,直到左(或右)子树成为堆。

时间复杂度:O(nlogn)

思路:

调整堆算法:

voeapagation(int * array,inti,int length){//调整堆

intleftChild=2 * I ^ 1;//定义左右子级

intrightChild=2 * I ^ 2;

int max=I;//初始化,假设左右子节点的父节点最大。

if(leftchildlengtarray[leftChild]array[max]){

max=leftChild

}

if(right child length array[right child]array[max]){

max=rightChild

}

if(max!=i){//如果最大值不是父节点,则交换值。

swap(array[max],array[I]);

HeapAdjust(数组,最大值,长度);//递归地,使其子树成为一个堆。

}

}堆排序算法:

Void heap (int * array,int length){//堆排序

for(inti=长度/2-1;I=0;I-){//从最后一个非叶节点开始向上遍历构建堆。

HeapAdjust(数组,I,长度);

}

for(intj=length-1;j0;j-){//调整堆。这里不需要j=0。

swap(数组[0],数组[j]);

HeapAdjust(数组,0,j);//因为每次交换后,取最大值(不再参与调整堆),第三个参数要用j而不是长度写。

打印(数组,长度);

}

}完整代码:

//堆排序

#包括牡蛎

使用命名空间TD;

Voidprint (intarray [],int length){//每次执行序列时打印序列。

for(inti=0;ilengthI){ 0

cout array[I]' ';

}

coutendl

}

voiapagation(int * array,inti,int length){//调整堆

intleftChild=2 * I ^ 1;//定义左右子级

intrightChild=2 * I ^ 2;

int max=I;//初始化,假设左右子节点的父节点最大。

if(leftchildlengtarray[leftChild]array[max]){

max=leftChild

}

if(right child length array[right child]array[max]){

max=rightChild

}

if(max!=i){//如果最大值不是父节点,则交换值。

swap(array[max],array[I]);

HeapAdjust(数组,最大值,长度);//递归地,使其子树成为一个堆。

}

}

Void heap (int * array,int length){//堆排序

for(inti=长度/2-1;I=0;I-){//从最后一个非叶节点开始向上遍历构建堆。

HeapAdjust(数组,I,长度);

}

for(intj=length-1;j0;j-){//调整堆。这里不需要j=0。

swap(数组[0],数组[j]);

HeapAdjust(数组,0,j);//因为每次交换后,取最大值(不再参与调整堆),第三个参数要用j而不是长度写。

打印(数组,长度);

}

}

int main(){ 0

intarray[]={49,38,65,97,76,13,27,49 };

intlength=sizeof(数组)/sizeof(*数组);

打印(数组,长度);//先打印原序列

HeapSort(数组,长度);

返回0;

}运行示例:

第一行是原始序列,第二到第八行是分别调整堆七次得到的序列。C++如何实现堆排序

至此,“如何在C中实现堆叠排序”的研究结束,希望能解决大家的疑惑。理论和实践的结合可以帮助你学得更好。去试试吧!如果你想继续学习更多的相关知识,请继续关注网站,边肖会继续努力,给大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/155200.html

(0)

相关推荐

  • sql设计表结构的常见问题有哪些

    技术sql设计表结构的常见问题有哪些这篇文章主要介绍sql设计表结构的常见问题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.sql改写遇到表字段经常要增加的业务怎么设计表结构?2.业务问

    攻略 2021年10月26日
  • 对镜贴花黄通假字,当窗理云鬓对镜贴花黄描述的是谁

    技术对镜贴花黄通假字,当窗理云鬓对镜贴花黄描述的是谁当窗理云鬓对镜贴花黄描述的是花木兰对镜贴花黄通假字。意思是当着窗子整理像乌云一样柔美的头发,对着镜子在额上贴好花黄。
    《木兰诗》是一首北朝民歌,宋郭茂倩《乐府诗集》归入

    生活 2021年10月30日
  • 如何理解HTTPS加密算法

    技术如何理解HTTPS加密算法本篇文章为大家展示了如何理解HTTPS加密算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言我们将会详细介绍RSA和ECDHE算法的原理以及在H

    攻略 2021年11月12日
  • Vue基于TypeScript的一次错误使用分析

    技术Vue基于TypeScript的一次错误使用分析这篇文章给大家介绍Vue基于TypeScript的一次错误使用分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。概述在使用Vue基于TypeScr

    攻略 2021年11月9日
  • 面试官:Spring 注解 @After,@Around,@Before 的执行顺序是

    技术面试官:Spring 注解 @After,@Around,@Before 的执行顺序是 面试官:Spring 注解 @After,@Around,@Before 的执行顺序是AOP中有@Before

    礼包 2021年11月11日
  • 抖音刷点赞,很多人都是刷出来的?

    技术抖音刷点赞,很多人都是刷出来的?拍出高质量的作品,抖音官方会主动为你推荐。“内容为王”,我们在拍摄作品时,一定要考虑能引起影迷共鸣的元素。只要产品质量好,就能迅速上热的涨粉。
    但我们都知道,想要上热搜,并不容易,那么

    测评 2021年10月22日