zoukankan      html  css  js  c++  java
  • 堆排序

    堆排序

     

    堆排序:

    复制代码
    template<class T>
    void _AdjustDown(T* arr, size_t size, size_t index)
    {
        size_t child = index * 2 + 1;
        while (child < size)
        {
            if (child + 1 < size && arr[child + 1] > arr[child])
            {
                ++child;
            }
            if (arr[child]>arr[index])
            {
                swap(arr[child], arr[index]);
                index = child;
                child = child * 2 + 1;
            }
            else
            {
                break;
            }
        }
    }
    
    template<class T>
    T* HeapSort(T* arr, size_t size)
    {
        assert(arr);
        for (int i = (size - 2) / 2; i >= 0; --i)
        {
            _AdjustDown(arr, size, i);
        }
        while (size > 1)
        {
            swap(arr[0], arr[size - 1]);
            --size;
            _AdjustDown(arr, size, 0);
            return arr;
        }
    }

  • 相关阅读:
    hdu 2065
    hdu 1999
    hdu 1562
    hdu 1728
    hdu 1180
    hdu 1088
    hdu 2133
    很好的例子。。
    putty 多标签式浏览
    df
  • 原文地址:https://www.cnblogs.com/shihaokiss/p/5497248.html
Copyright © 2011-2022 走看看