算法015_堆排序的过程演示
2024-02-01 本文已影响0人
为宇绸缪
堆排序过程
- 建立堆
- 得到堆顶元素,为最大元素
- 去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整重新使堆有序
- 堆顶元素为第二大元素
- 重复步骤 3,直到堆变空
原始的堆
![](https://img.haomeiwen.com/i27504478/7051fcad4801c4a7.png)
把最大的数给移开
![](https://img.haomeiwen.com/i27504478/1077ab1ed9e0bf15.png)
为了防止把数移上去出现空位,所以把堆最后一个位置的元素给移动上去。这样可以继续利用堆的向下调整性,也可以保证不出现空位
![](https://img.haomeiwen.com/i27504478/ef7c4f3e35484697.png)
然后利用向下调整性,把剩下的最大的数给移动上去
![](https://img.haomeiwen.com/i27504478/dcc8b3e3de098d66.png)
然后再把此时最大的数 8 给移出去
![](https://img.haomeiwen.com/i27504478/c2240ef25ca1f167.png)
接下来依然是把最后一位移上去,满足了向下调整的条件
![](https://img.haomeiwen.com/i27504478/8c210f9551c76f76.png)
继续调整堆
![](https://img.haomeiwen.com/i27504478/beb50e9217b67a8c.png)
然后把最大的 7 给移动上去,在把 7 拿出去,2 移到最上面
![](https://img.haomeiwen.com/i27504478/2e136d115fc227fa.png)
然后调整
![](https://img.haomeiwen.com/i27504478/308214b7e905426d.png)
拿掉最大的
![](https://img.haomeiwen.com/i27504478/b0435cb568d60b99.png)
最后面的 1 移动上去
![](https://img.haomeiwen.com/i27504478/54304ca1431c24e1.png)
![](https://img.haomeiwen.com/i27504478/8efae97bc0957eaa.png)
把 5 拿出去,然后把最后面的 0 给移动上去
![](https://img.haomeiwen.com/i27504478/1ed8afd106fcb90a.png)
调整堆
![](https://img.haomeiwen.com/i27504478/d6006712635d7637.png)
把 4 移动出去,再把最后一个数给移动上去
![](https://img.haomeiwen.com/i27504478/cc381e6029b6916e.png)
调整堆
![](https://img.haomeiwen.com/i27504478/5b4cf743c39491dd.png)
把 3 移出去,然后把最后一位 1 给移上去
![](https://img.haomeiwen.com/i27504478/b7a478cfac83c0a0.png)
然后调整
![](https://img.haomeiwen.com/i27504478/31bd672d1864ca2a.png)
把 2 移动出去,把最右侧的 0 给移动上去
![](https://img.haomeiwen.com/i27504478/1f6169286e195e90.png)
接着调整
![](https://img.haomeiwen.com/i27504478/6353c515d268a63a.png)
然后把 1 给 移动出去,就剩个 0 ,然后就把 0 也移动出去,就完成排序了