堆排序的简单实现

编程入门 行业动态 更新时间:2024-10-11 19:18:23

堆排序的<a href=https://www.elefans.com/category/jswz/34/1770983.html style=简单实现"/>

堆排序的简单实现

堆排序算法

简要说明:关于堆排序(要具体的看/%E5%A0%86%E6%8E%92%E5%BA%8F/2840151?fr=aladdin链接),首先你得了解什么是堆,通俗一点讲堆的条件1.完全二叉树/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91/7773232?fr=aladdin(不懂请自行充电)2.父节点要大于子节点

堆的结构        

一般都用数组来表示堆,i结点它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2。这是从0开始的结构。

堆的分类    

    堆分为最大堆(大顶堆)和最小堆(小顶堆),顾名思义就是父节点和左右孩子节点的关系,如果父节点大于所有的子节点的堆就是大顶堆,父节点小于所有子节点的堆就是小顶堆,选择大顶堆和小顶堆决定了排序的顺序,是从大到小还是从小到大排序。

。。。。。。下面还是通过代码描述吧!

​
#include<iostream>
using namespace std;
/*
arr为一棵完全二叉树
i为默认最大值
size为树的结点个数 
*/ 
/*函数功能:将父节点与子节点比较,实现父节点大于子节点 
*/
void three_max(int arr[],int i,int size){if(i<size){int left=2*i+1;int right=2*i+2;int largest=i;if(left<size){if(arr[largest]<arr[left]){largest=left;}}if(right<size){if(arr[largest]<arr[right]){largest=right;}}if(largest!=i){int temp=arr[largest];arr[largest]=arr[i];arr[i]=temp;three_max(arr,largest,size);}}
}
void heap_ljw(int arr[],int size){//建堆过程,实现所有结点满足堆的条件 for(int i=size-1;i>=0;i--){three_max(arr,i,size);}
}
void heap_sort(int arr[],int size){//不断的将每次筛选出的最大值切断,递归建堆 for(int i=size-1;i>=0;i--){heap_ljw(arr,i+1);int temp=arr[0];arr[0]=arr[i];arr[i]=temp;}
}
int main(){int arr[]={12,345,6,8,0,9,56789};heap_ljw(arr,7);//每次将最大值放到数组的前面 for(int j=0;j<7;j++){cout<<arr[j]<<" ";}cout<<endl;heap_sort(arr,7);//堆排完成 for(int i=0;i<7;i++){cout<<arr[i]<<" ";}return 0;
}​

可能,要恭喜那个看得懂的你了,写的不好,多担待!(跟着大佬学的,哈哈!!!)       

                                                                                                                                       L-MP

 

更多推荐

堆排序的简单实现

本文发布于:2024-02-06 16:01:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749782.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:简单

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!