小堆根

#include<queue>
#include<iostream>
#include<functional>
#include<ctime>
#include<cstdlib>
using namespace std;

priority_queue<int> pq1; //默认最大堆
priority_queue<int,vector<int>,greater<int> > pq2; //最小堆
/** addition
equal_to       相等
not_equal_to   不相等
less           小于
greater        大于
less_equal     小于等于
greater_equal 大于等
这些在所有的排序算法中同样适用
*/
int main(){
    srand(time(NULL));
    for(int i=0;i<10;i++){
      int r= rand()%100;
      pq1.push(r);
      pq2.push(r);
    }

    for(int i=0;i<10;i++){
         cout<<pq1.top()<<"   "<<pq2.top()<<endl;
         pq1.pop();
         pq2.pop();
    }
    cin.get();
    return 0;
}
时间: 2024-08-01 10:22:26

小堆根的相关文章

小堆 线索二叉树补充

1.小堆: 堆的构造,i>数组直接生成堆(向下调整),iii>插入创建堆(向上调整): (1).怎么实现一次调整? 找到最后一个非叶子结点,n/2-1:一直往下调整即可! (2)堆排----->优先级队列 堆的删除,只能是堆顶元素,再拿最后一个元素补充上去.在向下做一次调整.形成新的堆结构(满足堆的性质),将删除的数字输出就是堆排. 小堆:根(父)小于左右结点:最小的数字先出: 大堆:根(父)大于左右结点:最大的数字先出:   因而,进行堆排是就是优先级队列! 2.线索二叉树的查找父结点

小堆 大堆

1.堆 一种完全二叉树的线性表示方法:就是数组形式保存数据. 大堆:根(父)结点大于左右结点数据       ------->降序 小堆:根(父)结点小于左右结点              ------->升序 小堆如图: 小堆符合每个根(父)结点都比左右结点小!!! 堆的存储结构,就是一个线性表结构: private:     enum{HEAP_DEFAULT_SIZE = 10};  //默认数组空间为10     Type *heap;     //堆的数组名称     int cap

大/小堆:源代码

#pragma once #include <vector> #include <assert.h> // // 小堆 == 大堆 // 仿函数 // template<class T> struct Greater { bool operator() (const T& l, const T& r) { return l > r; } }; template<class T> struct Less { bool operator()

堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)

对堆进行排序,利用大堆实现升序,小堆实现降序.例如升序的实现,将较大数据存放在最后面,依次往前存放数据.具体为交换第一个元素和最后一个元素,再将不包含最后一个元素的堆进行下调,使堆保持大堆,将最大数据存放在堆中第一个位置,循环执行上述步骤,直到需要下调的数据个数为0. void AdjustDown(int *a, size_t root, size_t size)//下调--k为数组下标,size为数组元素个数 {//大堆 size_t parent = root; size_t child 

基础排序之堆排序(C语言小堆版)

堆排序 #include<stdio.h> typedef int ElementType; int arr1[11]={0,2,87,39,49,34,62,53,6,44,98}; void Swap(int* a,int* b) { int temp=*a; *a=*b; *b=temp; } void PercDown(int A[], int i, int N) { int child; ElementType Tmp; for (Tmp = A[i]; 2*i+1 < N;

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值

算法1(摘录)

第三章 算法 前言:许多人对算法的看法是截然不同的,我之前提到过了.不过,我要说的还是那句话:算法体现编程思想,编程思想指引算法. 同时,有许多人认为简单算法都太简单了,应当去学习一些更为实用的复杂算法.不过,许多复杂算法都是从简单算法演绎而来的,这里就不一一举例了.而且,算法千千万万.更为重要的是从算法中体会编程的思想. 4.1 简单问题算法 PS:接下来是一些入门问题,简单到都没有具体算法可言.但这些问题是我们当初对算法的入门.如果不喜欢,可以跳过. 实例111 任意次方后的最后三位 问题:

C语言范例学习04

第三章 算法 前言:许多人对算法的看法是截然不同的,我之前提到过了.不过,我要说的还是那句话:算法体现编程思想,编程思想指引算法. 同时,有许多人认为简单算法都太简单了,应当去学习一些更为实用的复杂算法.不过,许多复杂算法都是从简单算法演绎而来的,这里就不一一举例了.而且,算法千千万万.更为重要的是从算法中体会编程的思想. 4.1 简单问题算法 PS:接下来是一些入门问题,简单到都没有具体算法可言.但这些问题是我们当初对算法的入门.如果不喜欢,可以跳过. 实例111 任意次方后的最后三位 问题:

最大(小)堆和堆排序简介

(注:本文的相关叙述和图片摘自<数据结构与算法分析新视角>(周幸妮等),因此本文只是我的一个复习记录,详细的论述请参考该书.) 1. 最大(小)堆 对于一个完全二叉树来说,如果所有的结点(叶子结点除外)的值都大于(小于)其左右孩子结点的值,那么这个完全二叉树就被成为一个大(小)根堆.如下图所示.按照堆的定义可以发现,堆顶结点(二叉树的根结点)一定对应整个序列中的最大(小)记录.这样一来,可以设计一种排序思路,每次将堆的堆顶记录输出,同时调整剩余的记录,使它们从新排成一个堆.重复这个过程,就能最