堆排序

Posted chuxinbubian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

堆最好是使用数组来表示。。。。。

#include<iostream>
using namespace std;

void swap(int arr[],int i,int j)

    int temp = arr[i];
    arr[i]=arr[j];
    arr[j]=temp;

void heapify(int tree[],int n,int i)//n代表节点的数目,i代表对那个数字进行操作 

    if(i>=n)
    
        return ;
    
    int c1=2*i+1;//左儿子 
    int c2=2*i+2;//右儿子 
    int max =i;
    if(c1<n&&tree[c1]>tree[max])
    
        max=c1;
    
    if(c2<n&&tree[c2]>tree[max])
    
        max=c2;
    
    if(max !=i)
    
        swap(tree,max,i);
        heapify(tree,n,max);
    

int main()

    int tree[]=4,10,3,5,1,2;//待排序的堆 
    int n=6;
    heapify(tree,n,0);
    for(int i=0;i<n;i++)//打印排序后的结果 
    
        cout<<tree[i]<<endl;
    
    return 0;

 

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法:堆排序-Java实现

排序算法总结之堆排序

[ 数据结构 -- 手撕排序算法第七篇 ] 堆及其堆排序

重温基础算法内部排序之堆排序法

重温基础算法内部排序之堆排序法

堆(利用堆进行数组排序)-堆排序