堆排序

之前写过一篇博客是教你几种基本的常见排序算法 ,就说到会有后续的文章出来,继续写写排序问题,参加一些公司的电话面试,还总是会问到写关于排序的问题,大多是关于堆排序,快排序或者海量数据排序,或者从很到的数字序列中找到些中间位置的数字,或者是前K个最小的数字等相关问题,今天正好有空写了写堆排序的代码,自己存储一下,也拿出来共享给大家!
堆排序的算法思路,网上一搜索一堆,本科的课本里面也有较为详细的讲解,这里直接拿出代码,供大家参考!高手可以直接略过,小弟这厢礼过去了~~~!!

#include <iostream>

using namespace std;

template<class Any>
void SwapData(Any &a,Any &b)
{
    Any tmp=a;
    a=b;
    b=tmp;
}

template<class AnyType>
void CreateHeap(AnyType array[],int sPoint,int len)
{
    while((2*sPoint+1)<len)
    {
        int mPoint=2*sPoint+1;
        if((2*sPoint+2)<len)
        {
            if(array[2*sPoint+1]<array[2*sPoint+2])
                mPoint=2*sPoint+2;
        }
        if(array[sPoint]<array[mPoint])
        {
            SwapData(array[sPoint],array[mPoint]);
            sPoint=mPoint;
        }
        else
            break;
    }
    return ;
}


template<class AnyType>
void HeadpSort(AnyType array[],int len)
{
    for(int i=(len/2-1);i>=0;i--)
        CreateHeap(array,i,len);
    for(int j=len-1;j>0;j--)
    {
        SwapData(array[0],array[j]);
        CreateHeap(array,0,j);
    }
    return ;
}

template<class AnyType>
void OutPut(AnyType array,int len)
{
    cout << array[0];
    for(int i=1;i<len;i++)
        cout << " " << array[i];
    cout << endl;
}

int main()
{
    int array[]={5,4,7,3,9,1,8,6,10,2};
    HeadpSort(array,sizeof(array)/sizeof(int));
    OutPut(array,sizeof(array)/sizeof(int));
    return 0;
}

你可能感兴趣的:(代码,堆排序,模板编程C++)