堆排序

//堆排序
#include <iostream.h>
void main()
{
    int a[12]={2,4,6,34,31,24,65,37,87,68,90,23};
    int b[12];
    for (int i=0;i<12;i++)
    {
        b[i]=a[i];
        int temp=i;
        while (temp-1>=0)
        {    
            if (b[(temp-1)/2]<b[temp])
            {
                int x=b[(temp-1)/2];
                b[(temp-1)/2]=b[temp];
                b[temp]=x;
                temp=(temp-1)/2;
            } 
            else
            {
                break;
            }
        }
    }
    for (int j=11;j>=0;j--)
    {
        cout<<b[0]<<"  ";
        b[0]=b[j];
        int temp=0;
        while (2*temp+1<j)
        {
            if (2*temp+2<j)
            {
                int max=b[temp];
                int index=temp;
                if (max<b[2*temp+1])
                {
                    max=b[2*temp+1];
                    index=2*temp+1;
                }
                if (max<b[2*temp+2])
                {
                    max=b[2*temp+2];
                    index=2*temp+2;
                }
                if (index==temp)
                {
                    break;
                } 
                else
                {
                    b[index]=b[temp];
                    b[temp]=max;
                    temp=index;
                }
                
            } 
            else
            {
                int max=b[temp];
                int index=temp;
                if (max<b[2*temp+1])
                {
                    max=b[2*temp+1];
                    index=2*temp+1;
                }
                if (index==temp)
                {
                    break;
                } 
                else
                {
                    b[index]=b[temp];
                    b[temp]=max;
                    temp=index;
                }
            }

        }
    }
    cout<<endl;
}
原文地址:https://www.cnblogs.com/GoAhead/p/2676452.html