zoukankan      html  css  js  c++  java
  • 算法:优先级队列

    优先级队列:

     1 #include <stdio.h>
     2 
     3 int A[100];
     4 int heapsize;
     5 
     6 void swap(int i, int j) {
     7     int temp = A[i];
     8     A[i] = A[j];
     9     A[j] = temp;
    10 }
    11 
    12 void huifu(int i){
    13     int maxheap = i;
    14     int l = 2*i;
    15     int r = 2*i + 1;
    16     if(l <= heapsize && A[l] > A[maxheap])
    17         maxheap = l;
    18     if(r <= heapsize && A[r] > A[maxheap])
    19         maxheap = r;
    20     if(i != maxheap){
    21         swap(maxheap, i);
    22         huifu(maxheap);
    23     }
    24 }    
    25 
    26 
    27 void sort(){
    28     while(heapsize>1) {
    29         swap(heapsize, 1);
    30         --heapsize;
    31         huifu(1);
    32     }
    33 }
    34 
    35 void insert(int x){
    36     int i;
    37     A[++heapsize] = x;
    38     i = heapsize;
    39     while(i > 1 && A[i] > A[i/2]) {
    40         swap(i, i/2);
    41         i >>= 1;
    42     }
    43     /*
    44     while(A[heapsize] > i && i>=0){
    45         i/=2;
    46         swap(A[heapsize], A[i]);
    47     }*/
    48 }
    49 
    50 int  max(){
    51     return A[1];
    52 }
    53 
    54 int extract_max(){
    55     int tmp = A[1];
    56     A[1] = A[heapsize--];
    57     huifu(1);
    58     return tmp;
    59 }
    60 
    61 void build(){
    62     int i;
    63     for(i=heapsize/2; i>0 ;--i){
    64         huifu(i);
    65     }
    66 }
    67 
    68 int main(int argc, char const *argv[])
    69 {
    70     int n, i;
    71     scanf("%d", &n);
    72     heapsize = n;
    73     for(i=1;i<=n;++i){
    74         scanf("%d", &A[i]);
    75     }
    76     build();
    77     sort();
    78     // insert(24);
    79     // insert(20);
    80     // insert(100);
    81     for(i = 1; i <= n; i++)
    82         printf("%d
    ", A[i]);
    83     return 0;
    84 }
  • 相关阅读:
    密码等级
    ie兼容透明
    分割线
    支付宝银行判断接口
    date只能选择今天之后的时间js
    离开页面之前提示,关闭,刷新等
    使用 Linux 系统的常用命令
    C#窗体简单增删改查
    1
    二维数组
  • 原文地址:https://www.cnblogs.com/firstrate/p/3233635.html
Copyright © 2011-2022 走看看