堆排序的设计与实现

看了大话数据结构的堆排序,发现他的思想很好,又是循环实现的,递归实现比较简单

但是大华数据结构上的程序有错,我刚开始就按照他给的源码改了一下写出来,总是剩下三个元素就没法排序了,找了好久才发现数据下标溢出了

奉上源码,大家一起探讨

 

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;
}

  

posted @ 2014-09-17 17:34  xswby  阅读(104)  评论(0)    收藏  举报