zoukankan      html  css  js  c++  java
  • 二叉堆

    刚才练习了一下手写堆, 以后忘记扫一眼。

    支持插入元素,寻找最大,最小值的数据结构称为优先队列, 堆是优先队列的一种实现

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 // 建立一个最小堆,即从堆顶往下从小到大排
     5 int heap[260];
     6 int n;
     7 // 往下调整结点编号为i的点
     8 void siftdown(int i)
     9 {
    10     int t, flag=0;
    11     while(i*2<=n && flag==0)
    12     {
    13         if(heap[i]<heap[i*2])
    14             t=i;
    15         else
    16             t=i*2;
    17         if(i*2+1<=n && heap[t]>heap[i*2+1])
    18             t=i*2+1;
    19         if(t!=i)
    20         {
    21             swap(heap[t], heap[i]);
    22             i=t;
    23         }
    24         else
    25             flag=1;
    26     }
    27 }
    28 // 向上调整编号为i的点,插入点时用
    29 void siftup(int i)
    30 {
    31     int flag=0;
    32     if(i==1)
    33         return;
    34     while(i!=1 && flag==0)
    35     {
    36         if(heap[i]<heap[i/2])
    37             swap(heap[i], heap[i/2]);
    38         else
    39             flag=1;
    40         i/=2;
    41     }
    42 }
    43 void creat()
    44 {
    45 // 最后一个非叶结点编号为N/2
    46     for(int i=n/2; i>=1; i--)
    47         siftdown(i);
    48 }
    49 int main()
    50 {
    51     scanf("%d", &n);
    52     for(int i=1; i<=n; i++)
    53         scanf("%d", &heap[i]);
    54 
    55 // 创造一个含n个点的最小堆
    56     creat();
    57 
    58 // 插入m个点并排序
    59     int m;
    60     scanf("%d", &m);
    61     for(int i=1; i<=m; i++)
    62     {
    63         scanf("%d", &heap[++n]);
    64         siftup(n);
    65     }
    66 
    67 // 输出
    68     while(n)
    69     {
    70         printf("%d ", heap[1]);
    71         heap[1]=heap[n];
    72         siftdown(1);
    73         n--;
    74     }
    75 }
  • 相关阅读:
    sphinx实时索引和高亮显示
    打开页面就进行下载的一种方法
    mysql开启慢查询日志以及查看(转载自网络)
    Best MVC Practices(最优的MVC布局)
    nginx虚拟机配置(支持php)
    一个简单大方的赞后+1,踩后-1js动画效果
    如何创建ajax对象?
    psd图片到html
    小知识
    sass入门
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/9462147.html
Copyright © 2011-2022 走看看