排序算法(Max_Heap_Sort最大堆排序)

本文介绍了最大堆排序的基本原理和详细步骤,包括建立最大堆、交换根节点与最后一个叶子节点、通过Max_Heapify保持堆性质。Max_Heap_Sort是原址不稳定排序,时间复杂度为O(NlgN),空间复杂度为O(1)。通过VS2010测试,分别展示了N=20和N=10000的排序效果。
摘要由CSDN通过智能技术生成

Max_Heap_Sort排序的基本原理及步骤
基本原理:利用最大堆堆顶记录的是最大的关键字这一特性。
详细步骤如下:
1. 先将待排数据建立成为一个最大堆(最大堆就是根结点的数值不小于左右孩子结点的数值);如文中Build_Max_Heap()函数
2. 然后再将根结点与最后一个叶子结点交换,取出最后一个叶子结点便得到待排数据中最大的结点;如文中Swap()函数
3. 交换之后的堆根结点很有可能不满足堆的性质(也即新的根结点数值很有可能大于左右孩子结点数值),因此对根结点进行一次Max_Heapify(),该函数的作用是通过下溯法通过比较和交换使得新堆的根结点也满足最大堆的性质;
4. 依次这样,直到取出最后一个结点。。。


  • Max_Heap_Sort排序是原址不稳定排序,它其实是改进的树形选择排序——>通过下溯法使得最大关键字置于堆顶,然后再与最后叶子结点进行交换。

  • *Max_Heap_Sort排序的时间复杂度是O(NlgN),空间复杂度为O(1)。


测试用例: 运行环境为VS2010
下面以待排数据长度N=20,数据数值范围Range=100和N=10000,Range=1000进行分析说明。

  • 当N=20,Range=100时,运行结果如下:这里写图片描述
  • 当N=10000,Range=1000时,由于数据太长,这里只给出排序所需花费的时间为 Sorting spends about 13ms.

//Codes of the Max_Heap_Sort

void Heap_Sort(int *arr)
{
    if(arr==NULL)
        return;
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值