重新学习数据结构里面的堆排序,堆排序是基础排序算法里面效率最好的
实现:
#include <iostream>
#include <cmath>
using namespace std;
template <class T>
//n是待排序序列的长度
//p[n]是待排序序列
//这里用了template,用于泛型
void sift(T p[],int i,int n)
{
int j;
T t;
t=p[i];
j=2*(i+1)-1;
while(j<=n)
{
if((j<n)&&(p[j]<p[j+1]))
j=j+1;
if(t<p[j])
{
p[i]=p[j];
i=j;
j=2*(i+1)-1;
}
else
j=n+1;
}
p[i]=t;
return;
}
template <class T>
void hip_sort(int n,T p[])
{
int i;
int mm;
mm=n/2;
for(i=mm-1;i>=0;i--)
{
sift(p,i,n-1);
}
for(i=n-1;i>=1;i--)
{
t=p[0];
p[0]=p[i];
p[i]=t;
sift(p,0,i-1);
}
return;
}
来源:CSDN
作者:HWQlet
链接:https://blog.csdn.net/HWQlet/article/details/104063665