关于堆排序,堆排序就是用二叉树的逻辑进行排序,实际并不是二叉树,在进行堆排序时,要满足左右树都是小堆的情况下才能用,那么,如果左右树不是小堆的话,我们是不是要排成小堆的样子呢,那么,正式开始堆排序的实现:
首先我们用图来理解一下:
首先,我们可以看到,我们将一个数组画成了一个二叉树的样子,一棵树就是一个堆,显然,这些堆都是乱的,那么我们该如何进行排序呢,首先我们要进行排堆,排成左右子树都是小堆的堆,比如:
经过排堆,我们就得到了这样的一个堆,可以看到,第一个元素就是最小的数,左右树都是小堆,那么,我们排序出来应该是从大到小还是从小到大呢,很多人都以为是从小到大吧,其实不然,小堆排出来是从大到小,大家请看:
那这是怎么做到的呢,大家请看代码,首先是头文件以及函数声明:
再到排堆:
再到交换:
再到整体排序:
然后是主函数:
最后就是打印了:
今天的堆排序就到此为止啦,后面还会继续更新快速排序等排序算法。