zoukankan      html  css  js  c++  java
  • Algorithm Part I:Priority Queues

    1.binary heap实现

    BinaryHeap.h

    #ifndef BINARYHEAP_H
    #define BINARYHEAP_H
    
    
    class BinaryHeap
    {
        public:
            BinaryHeap(int N);
            bool isEmpty();
            void exchange(int i,int j);
            void insert(int key);
            int delMax();
            int getMax();
            virtual ~BinaryHeap();
        protected:
        private:
            int N;
            int * data;
            void swim(int key);
            void sink(int key);
    };
    
    #endif // BINARYHEAP_H
    


    BinaryHeap.cpp

    #include "BinaryHeap.h"
    #include <stdlib.h>
    
    BinaryHeap::BinaryHeap(int N)
    {
        this->N = 0;
        this->data = (int *)malloc(sizeof(int)*(N+1));
    }
    
    BinaryHeap::~BinaryHeap()
    {
    }
    
    bool BinaryHeap::isEmpty()
    {
        return N == 0;
    }
    
    void BinaryHeap::exchange(int i,int j)
    {
        int temp = this->data[i];
        this->data[i] = this->data[j];
        this->data[j] = temp;
    }
    
    void BinaryHeap::swim(int key)
    {
        while(key > 1 && data[key/2] < data[key])
        {
            exchange(key/2,key);
            key = key/2;
        }
    }
    
    void BinaryHeap::insert(int key)
    {
        N++;
        data[N] = key;
        swim(N);
    }
    
    void BinaryHeap::sink(int key)
    {
        while(key*2 <= N)
        {
            int j = key*2;
            if(j < N && data[j] < data[j+1])
                j++;
            if(data[key] >= data[j])
                break;
            else
            {
                exchange(key,j);
                key = j;
            }
        }
    }
    
    int BinaryHeap::delMax()
    {
        int max = data[1];
        exchange(1,N-1);
        N--;
        sink(1);
        return max;
    }
    
    int BinaryHeap::getMax()
    {
        return data[1];
    }
    
    

    main.c

    #include <iostream>
    #include "BinaryHeap.h"
    
    using namespace std;
    
    int main()
    {
        BinaryHeap * bp = new BinaryHeap(10);
        bp->insert(3);
        bp->insert(2);
        bp->insert(1);
        bp->insert(5);
        bp->insert(8);
        bp->insert(7);
        cout << bp->getMax() << "
    ";
        bp->delMax();
        cout << bp->getMax() << "
    ";
        char c;
        cin >> c;
        return 0;
    }
    


    各操作时间复杂度的分析:



    2.堆排序

    堆排序的主要步骤:


    (1)建堆


    (2)依次移除最大元素,将它放到数组的尾端。



    3.各种排序算法的分析




    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    下载地址jquery upload file demo (C#)
    特征卷积基于3D卷积神经网络的人体行为理解(论文笔记)
    应用目录S5PV210的BL1应用
    手机音效手机测试游戏类
    metadata查询Querying Metadata
    arraynodeSorting
    functionclass[LeetCode]Path Sum II
    functionclass[LeetCode]Permutation Sequence
    exceptionfunction[LeetCode]Permutations
    exceptionfunction[LeetCode]Permutations II
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4637497.html
Copyright © 2011-2022 走看看