随看随记
- 堆排序用的少的原因:对堆排序中的数据是乱的,在堆排序的过程中,需要进行大量的数据交换,而且在交换的过程中,因为二叉堆中的数据无序,所以在进行一次交换,可能会需要同时访问到一大片数据。需要消耗掉很大部分缓存,堆内存也不友好,因此没人用。都用快速排序。
Basic Sorting
Selection Sort,Heap Sort
- 选择排序的步骤
- 寻找最小的那一项。
- 将这一项和最前面哪一项进行交换,并修正他。
- 重复剩下未被修复的部分,直到所有的项目都被修复。
- 其运行逻辑为
- 将所有的新的项目都放到最大堆中,并且丢弃输出数组,创建新的输出数组
- 重复N此以下动作
- 从最大堆中弹出最大值
- 将最大值放入到输出数组的未使用部分的末尾中
对于堆来讲,将数据存入堆的时候就已经做了最大最小的排序了,依靠堆的数据结构就已经办到了,当堆不断pop出最小值时,就已经实现了上述最有复杂度的找最小值的问题,接下来做的就只剩下吧新的最小值加进去新的堆中就可以了。
- 使用创建堆的方法解决了寻找最大最小值的问题 ,减少了时间复杂度
- 同时也增加了空间复杂度,是由于创建了新的数组和堆的空间
- 为了节省多建立一个数组的空间又有了In-place Heapsort排序
二叉最小堆保证其子节点第一是大于其父节点的,并且保证左节点满员。
- 其和其原始的Heapsort排序不同是其在最开始没有建立起一个真实的Heap,而仅仅根据数组的顺序将其进行了Heap化。