堆排序(In-Place heap sort)

就地堆排序(In-Place heap sort)

1)在输入数组的顶部就地构建堆,在构建堆时,仅影响当前正在处理的数组中的插槽。因此,在堆中插入第一个输入元素实际上并不会改变任何事情。然后插入第二个元素。唯一会影响数组中索引0和1的元素,因此,输入数组的其余部分仍然是安全的。只需要跟踪堆数组中与输入数组相同的元素数即可。
2)一旦构建了堆,需要执行从堆中删除并将其插入到输出数组的排序过程。在这里,使用了从数组后面开始构建输出数组的技巧。每次从堆中删除元素时,堆阵列的最后一个活动插槽实际上就变得可用。因此,可以将已删除的元素插入该插槽。通过继续执行此操作,可以对输出数组进行排序,但顺序相反。这意味着如果堆是<=堆,则输出数组将被> =排序。当然,在构建堆时,可以使用相反的顺序,使输出数组的顺序正确。
3)使用3个随机输入数组进行测试,长度为10、100、200。

HeapSorting.cpp

#include <iostream>
#include<random>
void MakeMaxHeap(int ary[], int n, int i)
{
   
	//i is the last father root
	int max = i;
	int Maxnumber = i * 2 + 1;
	//left child

	if (ary[Maxnumber + 1] > ary[Maxnumber] && Maxnumber + 1 < n)
		{
   
			Maxnumber++;
		}
	// compare child which is larger(left or right)
	if (Maxnumber<n &&ary[Maxnumber]>ary[max])</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值