在N个数据中找K个最大数据思想:用堆实现找最大的数据,则先建立一个N个数据中其前K个节点的最小堆,将没进入最小堆的节点依次与小堆的头节点比较,若大于头节点,则替换两个值,并且调用向下调整算法(其思想前面博客已经介绍实现),直到N个数据比较完成,此时最小堆中的K个节点即为N个数据中的K个最大数据。
在代码中为了方便测试N与K的值较小。
堆排序思想:即建立一个堆来实现排序,升序与降序思想基本相同,这里介绍降序,要降序则先建立一个最小堆后,则每次将最小堆头节点与尾节点值交换,即最后一个节点为最小值,此时除去最后一个节点,在剩下范围调用向下调整算法,在依次用相同方法实现直至范围只剩下一个节点即为最大的一个节点。此时则排序完成。
代码实现:
#include <iostream>
#include <cstdlib>
#include <assert.h&