昨日闲来无事就写了下堆排
#include <iostream.h>
typedef int DataType;
class S{
public:
static void swap(DataType& x,DataType& y);
static void heap_sort(DataType a[],int num);
static void GenerateArray(DataType a[],int num);
static void AdjustHeap(DataType a[],int pos,int len);
};
void S::swap(DataType& x,DataType& y){
DataType temp;
temp = x;
x = y;
y = temp;
}
//调整堆
void S::AdjustHeap(DataType a[],int pos,int len){
for (int i = len-1;i>0;i--){
if(a[i]>a[i/2])
S::swap(a[i],a[i/2]);
}
}
void S::heap_sort(DataType a[],int len){
while(len>0){
S::AdjustHeap(a, 0, len);
len--;
S::swap(a[0],a[len]);
}
}
//生成样本数组
void S::GenerateArray(DataType a[],int num)
{
int i;
srand(time(NULL));
for(i=0;i<num;i++)
{
a[i]=(DataType)(rand());
}
}
int main(int argc, char *argv[])
{
DataType a[10];
int num = 10;
S::GenerateArray(a,10);
cout<<"堆排序之前"<<endl;
for(int i=0;i<num;i++){
cout<<a[i]<<" ";
}
cout<<endl;
S::heap_sort(a,num);
cout<<"堆排序之后"<<endl;
for(int i=0;i<num;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}