堆排序的设计与实现
看了大话数据结构的堆排序,发现他的思想很好,又是循环实现的,递归实现比较简单
但是大华数据结构上的程序有错,我刚开始就按照他给的源码改了一下写出来,总是剩下三个元素就没法排序了,找了好久才发现数据下标溢出了
奉上源码,大家一起探讨
void swap(int*arry, int m,int n)
{
int tmp=arry[m];
arry[m]=arry[n];
arry[n]=tmp;
}
void heapadjust(int* arry,int root,int max)
{
int tmp=arry[root];
for(int i=2*root;i<=max;i*=2)
{
if((i+1)<=max&&arry[i]<arry[i+1])
{
++i;
}
if(tmp>=arry[i])
{
break;
}
arry[root]=arry[i];
root=i;
}
arry[root]=tmp;
}
void display(int* arry,int length)
{
for(int k=1;k<=length;k++)
{
cout<<arry[k]<<" ";
}
cout<<endl;
}
void heapsort(int* arry,int length)
{
for(int i=length/2;i>0;i--)
{
heapadjust(arry,i,length);
}
display(arry,length);
for(int j=length;j>0;j--)
{
swap(arry,1,j);
cout<<j<<" 前:";
display(arry,length);
heapadjust(arry,1,j-1);
cout<<" 后:";
display(arry,length);
}
}
int main(int argc,char* argv[])
{
int arry[]={-1,1,7,3,2,8,6,9,4};
heapsort(arry,8);
return 0;
}

浙公网安备 33010602011771号