• 二叉堆


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

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

     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 }
  • 相关阅读:
    线程池的爆掉
    WebApi的调用-1.前端调用
    使用SqlSugar 4.X的T4生成实体类
    JSON.NET 空值处理, 数字转字符,时间格式化
    C#获取路径
    MVC4 下DropDownList使用方法(转)
    14.并发与异步
    14.并发与异步
    14.并发与异步
    VS2013 生成时复制文件或目录到指定目录
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/9462147.html
Copyright © 2020-2023  润新知