码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2015-03-21 23:00:13      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:代码   堆排序   模板编程c++   

之前写过一篇博客是教你几种基本的常见排序算法 ,就说到会有后续的文章出来,继续写写排序问题,参加一些公司的电话面试,还总是会问到写关于排序的问题,大多是关于堆排序,快排序或者海量数据排序,或者从很到的数字序列中找到些中间位置的数字,或者是前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++   

原文地址:http://blog.csdn.net/berguiliu/article/details/44522933

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!