排序算法的数组实现 -- 堆排序(二)

堆排序:

void static Heap_ExChange(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

int Heap_Parent(int n_children)
{
	return (n_children - 1) / 2;
}

int Heap_Left(int n_parent)
{
	return 2 * n_parent + 1;
}

int Heap_Right(int n_parent)
{
	return 2 * (n_parent + 1);
}
 
void static Max_Heapify(int * a, int heap_size, int n_parent)
{
	int n_Max = 0;
	int n_L = Heap_Left(n_parent);
	int n_R = Heap_Right(n_parent);
	
	if(n_L <= heap_size -1 && a[n_L] > a[n_parent])
		n_Max = n_L;
	else
		n_Max = n_parent;

	if(n_R <= heap_size - 1 && a[n_R] > a[n_Max])
		n_Max = n_R;
	
	if(n_Max != n_parent)
	{
		Heap_ExChange(a[n_Max],a[n_parent]);
		Max_Heapify(a, heap_size, n_Max);
	}
}

void static Build_Max_Heap(int *a, int size)
{
	int heap_size = size;

	for(int i = heap_size / 2 - 1; i >= 0; i--)
	{
		Max_Heapify(a,heap_size, i);
	}
}

void Heap_Sort(int *a, int size)
{
	int heap_size = size;
	Build_Max_Heap(a, heap_size);
	
	for(int i = size - 1; i >= 1; i--)
	{
		Heap_ExChange(a[0],a[i]);
		heap_size --;
		Max_Heapify(a, heap_size,0);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值