堆排序
先整理学的,有点乱
数据结构排序算法之堆排序演示
#include<iostream>
using namespace std;
void MaxHead(int *a,int size);
void makeMaxHead(int *a,int size,int i);
void swap(int &a,int &b);
void prinfout(int *a,int size);
int main()
/*示例*/
{
int a[11]={0,1,23,3,435,5,453,78,455,5435,543};
MaxHead(a,11);
for(int i=1;i<11;i++)
{cout<<"["<<a[i]<<"]";}
cout<<endl;
return 0;
}
void MaxHead(int *a,int size)
{
/*
*/
for(int i=(size/2);i>0;i--)
makeMaxHead(a,size-1,i);
prinfout(a,11);
for(int i=size-2;i>0;i--)
{swap(a[1],a[i+1]);
makeMaxHead(a,i,1);
}
}
void makeMaxHead(int *a,int size,int i)
//a为待处理数组,size为数组大小,i:第i个父结点
{
int temp= a[i];//a[i]的缓存
int mark=0;//判断标志位
int j=2*i;//第i个父节点的左子节点
while(j<=size&&mark==0)
{
if(j+1<=size&&a[j+1]>a[j]) j++;
if(a[j]<=temp) {mark=1; }
else {a[j/2]=a[j]; j=j*2;}
}
a[j/2]=temp;
}
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void prinfout(int *a,int size)
{
for(int i=1;i<11;i++)
{cout<<"["<<a[i]<<"]";}
cout<<endl;
}