20190607排序总结

堆排:
1、建堆:判断是否两个孩子,比较两个孩子大小,大的孩子和父结点交换,之后判断子结点是否还有孩子,如果没有,重新回到父结点。
2、排序:从中间结点开始,依次递减至第一个,之后把顶部的数字拿出来。
用二叉树实现堆有什么好处?
1、没有空间浪费
2、没有扩容代价

void CreateHeap(int a[],int root,int len)
{
	int i,t = a[root];
	i = 2 * root;
	while(i <= len)
	{
		if(i < len)
		{
			if(a[i] < a[i + 1])
				i++;
		}
		if(t >= a[i])
			break;
		else
		{
			a[i / 2] = a[i];
			i = 2 * i;
		}
	}
	a[i / 2] = t;
}
void Sort(int a[],int len)
{
	int i,t;
	for(i = len / 2;i >= 1;--i)
	{
		CreateHeap(a,i,len);
	}
	for(i = len;i >= 1;--i)
	{
		t = a[1];
		a[1] = a[i];
		a[i] = t;
		CreateHeap(a,1,i - 1);
	}
	
}
发布了39 篇原创文章 · 获赞 10 · 访问量 764

猜你喜欢

转载自blog.csdn.net/weixin_43393776/article/details/91064134