思路一:维护一个maxSize为k的最大堆,用来存放这k个数,遍历数组,如果堆未满,插入堆中。如果堆已满,如果数字比堆的根节点小,则删除堆的根节点,向堆中插入这个数字。 时间复杂度为 O(nlog(k))。如果求最大的k个数,就是使用最小堆了。 思路二:其实我们也可以在n个整数的范围内构建最小堆,然后每次将堆顶...
void Sort();//建一个最大堆并排序。依照顺序(由小到大)放在原数组 int PopMaxHeap();//取最大堆的最大值 void InsertMaxHeap(int a);//插入一个新值到最大堆,事实上就是在元素尾部增加一个值,再维护最大堆的性质 void print();//顺序输出数组 protected: int LeftChild(int node);//取左孩子下...
C. 堆 正确答案:C. 堆 解析:堆是一种基于完全二叉树的数据结构,可以在O(log n)的时间复杂度内进行插入和删除操作,并可以快速找出最小或最大的元素。对于需要频繁插入和删除操作,并且需要快速找到最大或最小元素的场景,堆是最适合的选择。数组和链表的插入和删除操作效率较低,树需要维护有序性。反馈...
依照顺序(由小到大)放在原数组intPopMaxHeap();//取最大堆的最大值voidInsertMaxHeap(int a);//插入一个新值到最大堆,事实上就是在元素尾部增加一个值,再维护最大堆的性质voidprint();//顺序输出数组protected:intLeftChild(int node);//取左孩子下标intRightChild(int node);//取右孩子下标intParent(i...
* 题目:堆排序实现,另外实现接口:取堆最大值并删除、堆插入 * 思路:堆是在顺序数组原址上实现的。利用全然二叉树的性质。更具最大堆和最小堆的定义实现的。 * 经典应用场景:内存中堆数据管理 * 空间复杂度:堆排序是在原址上实现的,为0 * 时间复杂度:堆排序为O(n lgn) ,取最值O(1)。插入最坏为O(lg...