/*************************************************************************
> File Name: heap_sort.cpp
> Author: ryq
> Email: ranyongqing@163.com
> Created Time: 2014年05月23日 星期五 11时02分19秒
************************************************************************/
#include<iostream>
#include<vector>
using namespace std;
template<typename T>
void build_heap_partion(vector<T> &a,int i,int len)
{
int lpos = 2*i+1;
int rpos = 2*i+2;
int tmp = 0;
int j = i;
while(j < len && lpos < len){
if(rpos != len && a[lpos] < a[rpos])
tmp = rpos;
else
tmp = lpos;
if(a[tmp] > a[j]){
T k = a[tmp];
a[tmp] = a[j];
a[j] = k;
}
else
break;
j = tmp;
lpos = 2*j+1;
rpos = 2*j+2;
}
}
template<typename T>
void build_heap(vector<T> &des)
{
int size = des.size();
for(int i = size/2; i >= 0; i--){
build_heap_partion(des,i,size);
}
}
template<typename T>
void heap_sort(vector<T> &des)
{
for(int i = des.size()-1 ; i > 0; i--){
int tmp = des[i];
des[i] = des[0];
des[0] = tmp;
build_heap_partion(des,0,i);
}
}
int main()
{
int a[] = {81,94,11,96,12,35,17,95,28,58,41,75,15};
vector<int> des(a,a+sizeof(a)/sizeof(int));
build_heap(des);
heap_sort(des);
for(vector<int>::iterator it = des.begin(); it != des.end(); it++)
cout<<*it<<" ";
cout<<endl;
}
heap_sort-----C++
最新推荐文章于 2022-12-12 08:30:00 发布