数据结构之优先队列

  1. 队列与优先队列
    队列:一维表结构,按照入队次序出队。
    优先队列:树形结构,按照优先级出队;每个元素都有一个优先级权值;元素可以拥有相同的权值;增删查操作;最大优先与最小优先。
    MaxpriorityQueue:Max()返回最大优先级的元素;insert(x);deleteMax(x)从队列中删除具有最大优先级的元素。
    从某种程度上来说,优先队列是一种排序列表,其排序反映了元素的优先级。

  2. 堆排序

    • 最大堆:最大树+完全二叉树,满足完全二叉树的一系列性质。
      最大堆
      最大树:树中每一个节点的值都大于等于其子节点的树。
      堆节点从1开始编号,则节点i的左孩子为2i,右孩子为2i+1。堆的高度为log2(n+1),n个元素。

    • 最大堆线性表描述

      template<typename T>
      class MaxHeap{
      private:
      int currentsize,maxsize;//当前的元素个数,最大堆中允许的最大元素个数。
      T* heap;//定义数组
      public....一系列成员函数
      MaxHeap<T> & insert(const T& data){
      int i=++currentsize;
      if(i>maxsize)
      	throw();
      while(i!=1&&data>heap[i/2]){
      	heap[i]=heap[i/2];//一直向上搜索直到找到data应该在的位置 
      	i=i/2;
      }
      heap[i]=data;
      return *this;                               
      }//插入元素,新元素向上移动,直到符合最大堆的特性,最坏情况是将元素移动到树根O(log2N)。
      MaxHeap<T>& Deletemax(){
      }//将最后一个元素放到根节点,依次下移,每次将其与子节点中最大的元素做交换,直到data符合最大堆的性质。O(log2N)
      void Initialize(T a[],int size, int ArraySize){
      }//构建最大堆:先将元素构成完全二叉树,再从n/2节点开始到根节点,依次将每个节点的子树都整理为最大堆,整理过程与删除过程类似,下降,将子树的根节点与每一层较大节点交换,直到data>=子节点。O(N)
      };
      
    • 堆排序
      建最大堆,那么最大的元素始终未根节点,将根节点删除移动到序列的末尾,不断重整,得到剩余序列的最大值。
      时空复杂度:O(n*logn)、O(1)
      属于不稳定排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值