• Heap_Sort金老师模板


    #include <iostream>
    using namespace std;
    
    //根据需求调整大小
    #define SIZE 1001
    int heap[SIZE];
    
    #define swap(x, y) {x = x + y; y = x - y; x = x - y;}
    
    void fixDown(int heap[], int pos, int size){
        
        int x = pos;
        if(x > size) return;//exit
        
        // 选出最大的
        int l = 2 * x;
        int r = l + 1;
        int maxPos = x;
        if(l <= size && heap[maxPos] < heap[l]) maxPos = l;
        if(r <= size && heap[maxPos] < heap[r]) maxPos = r;
    
    
        if(maxPos != x){ //如果父节点不是最大的,进行互换,并在新的点上继续fixDown
            swap(heap[x], heap[maxPos]);
            fixDown(heap, maxPos, size);
        }
    }
    
    void fixUp(int heap[], int size, int pos){
        int x = pos;
        int p;
        while(x > 1){
            p = x/2;
            if(heap[x] > heap[p]){
                swap(heap[x], heap[p]);
                x = p;
            }else return;
        }
    }
    
    void buildHeap(int heap[], int size){
        for(int i = size/2; i >= 1; i--){
            fixDown(heap, i, size);
        }
    }
    
    //heapSort前要先build heap
    void heapSort(int heap[], int size){
        int oriSize = size;
        for(int i = 0; i < oriSize - 1; i++){ //注意不要把oriSize和size混在一起
            //互换堆顶和最后一个元素,将堆顶元素放在数组最后面
            swap(heap[size], heap[1]);
            size--;
            fixDown(heap, 1, size);
        }
    }
    
    int main(){
        int size = 7;
        for(int i = 1; i <= size; i++) heap[i] = 8 - i;
        buildHeap(heap, size);
        heap[size + 1] = 8;
        size++;
        fixUp(heap, size, size);
        heapSort(heap, size);
    }

     POJ3481

    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    Redis 和 Memcached 的区别
    缓存详解
    HTTP常见状态码
    ORM的概念, ORM到底是什么
    remote: Unauthorized fatal: Authentication failed for...
    TR、FN、FP、FN
    <笔记>ue破解
    <笔记>bmp图片数据格式
    三轴加速度数据处理
    智能手环+三轴加速度传感器总结
  • 原文地址:https://www.cnblogs.com/linux0537/p/7523289.html
Copyright © 2020-2023  润新知