我之前粗略的写了一下,但是阅读量不高,此篇文章是我讲过精心修改后得出的,感谢大家一直以来的支持。
本期内容难度较高,我会先和大家一起在理论上探讨堆排序的原理,最后跟大家一起以C语言为基础实现代码。在阅读本片文章前我建议大家本着一遍可能难以理解的心态去阅读,因为这个知识点融合了二叉树和排序的内容,所以对基础要求较高,希望本篇文章能够帮助到大家!
堆排序的性质
性质:在完全二叉树中,子结点的键值或索引总是小于(或者大于)它的父节点
如图:便是在一组数中堆排序(大顶堆)的最终形态。
堆排序的原理
实现逻辑:
① 先将初始的R[0…n-1]建立成最大堆,此时是无序堆,而堆顶是最大元素。
② 再将堆顶R[0]和无序区的最后一个记录R[n-1]交换,由此得到新的无序区R[0…n-2]和有序区R[n-1],且满足R[0…n-2].keys ≤