zoukankan      html  css  js  c++  java
  • 基于堆的优先队列和用优先队列排序的例子

    #include <stdio.h>
    
    void exch(int& a, int &b)
    {
        int tmp = a;
        a = b;
        b = tmp;
    }
    
    void fixup(int a[], int k)
    {
        while(k>1 && a[k/2]<a[k])
        {
            exch(a[k/2], a[k]);
            k/=2;
        }
    }
    
    void fixdown(int a[], int k, int N)
    {
        while(2*k <= N)
        {
            int j=k*2;
            if(j<N && a[j]<a[j+1]) j++;
            if(!(a[k]<a[j])) break;
            exch(a[k], a[j]);
            k = j;
        }
    }
    
    class PQ
    {
        private:
            int *pq;
            int N;
        public:
            PQ(int maxN)
            {
                pq = new int[maxN+1];
                N = 0;
            }
    
            int empty() const
            {
                return N == 0;
            }
    
            void insert(int item)
            {
                pq[++N] = item;
                fixup(pq, N);
            }
    
            int getmax()
            {
                exch(pq[1], pq[N]);
                fixdown(pq, 1, N-1);
                return pq[N--];
            }
    };
    #include <stdio.h>
    #include "PQ.cpp"
    
    using namespace std;
    
    void pqsort(int a[], int l, int r)
    {
        int k;
        PQ pq(r-l+1);
        for(k=l; k<=r; k++)
            pq.insert(a[k]);
        for(k=r; k>=l; k--)
            a[k] = pq.getmax();
    }
    
    int main()
    {
        int a[10] = {3,5,4,8,6,9,6,5,4,1};
        pqsort(a, 0, 9);
        for(int i=0; i<10; i++)
            printf("%d ", a[i]);
        printf("\n");
        return 0;
    }
  • 相关阅读:
    centos7&redhat7修改密码
    memcached安裝部署文檔
    cronolog安装部署文檔
    ftp安裝部署文檔
    cacti安裝部署文檔
    php安裝部署文檔
    MYSQL-5.5安装部署文档
    MySQL5.1安裝部署文檔
    nginx進階
    IO进程疏漏
  • 原文地址:https://www.cnblogs.com/wouldguan/p/2765900.html
Copyright © 2011-2022 走看看