C语言之堆排序算法的详细介绍

来源:爱站网时间:2022-09-13编辑:网友分享
C语言之堆排序算法的详细介绍内容就让小编来给大家简单说下吧,对此感兴趣的小伙伴可以来参考阅读下,希望爱站技术频道小编所整理的内容能解决你的困惑,让你收获不一样的知识点。

本文实例讲述了C++堆排序算法。分享给大家供大家参考,具体如下:

堆中元素的排列方式分为两种:max-heap或min-heap,前者每个节点的key都大于等于孩子节点的key,后者每个节点的key都小于等于孩子节点的key。

由于堆可以看成一个完全二叉树,可以使用连续空间的array来模拟完全二叉树,简单原始的实现如下:

#include
int heapsize=0;//全局变量记录堆的大小
void heapSort(int array[],int n){
 void buildHeap(int [],int);
 void exchange(int[],int,int);
 void heapify(int[],int);
 buildHeap(array,n);
 for(int i=n-1;i>=1;i--){
  exchange(array,0,i);
  heapsize--;
  heapify(array,0);
 }
}
//构建堆
void buildHeap(int array[],int n){
 void heapify(int[],int);
 heapsize=n;
 //从最小的父节点开始,进行堆化,直到树根节点
 for(int i=heapsize/2-1;i>=0;i--){
  heapify(array,i);
 }
}
//堆化
void heapify(int array[],int n){
 void exchange(int[],int,int);
 int left_child=n*2+1;
 int right_child=n*2+2;
 int largest;
 if(left_childarray[n]){
  largest = left_child;
 }
 else{
  largest = n;
 }
 if(right_childarray[largest]){
  largest=right_child;
 }
 if(largest!=n){
  exchange(array,largest,n);
  heapify(array,largest);
 }
}
void exchange(int array[],int i,int j){
 int tmp = array[i];
 array[i]=array[j];
 array[j]=tmp;
}
int main(){
  int arr[9]={3,1,6,9,8,2,4,7,5};
  heapSort(arr,9);
  for(int i=0;i
#include
#include
int main()
{
  int arr[9]={0,1,2,3,4,8,9,3,5};
  std::vector vec(arr,arr+9);
  //0 1 2 3 4 8 9 3 5
  for(auto c:vec){
    std::cout

C语言之堆排序算法的详细介绍已经一一给大家整理出来了,还有哪些方面的技术内容是需要进一步了解清楚的,来爱站技术频道网站吧!里面的文章应有尽有,一定不会让你失望。

上一篇:C语言之动态内存分配使用详情

下一篇:C语言之类型转换运算符的内容

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载