堆排序

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

#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;
}

 

posted @ 2019-09-21 21:40  Maggieisxin  阅读(153)  评论(0编辑  收藏  举报