模板实现通用的冒泡排序

template<class T>
class Less
{
public:
    bool operator()(const T& left, const T& right)
    {
        return left < right;
    }
};

template<class T>
class Greater
{
public:
    bool operator()(const T& left, const T& right)
    {
        return left > right;
    }
};

template<class Iterator, class Compare>
void Bubble(Iterator first, Iterator last, Compare com)
{
    bool IsChange = false;
    while(first != last)
    {
        IsChange = false;
        Iterator cur = first;
        Iterator next = cur+1;
        while(next != last)
        {
            if(com(*next, *cur))
            {
                swap(*cur, *next);
                IsChange = true;
            }

            cur = next;
            ++next;
        }

        if(!IsChange)
            return;

        --last;
    }
}

template<class T, class Iterator>
void Bubble(Iterator first, Iterator last)
{
    Bubble(first, last, Less());
}

int main()
{
    int array[] = {4,3,6,8,1,9,2,0,5,7};
    Bubble<int>(array, array+sizeof(array)/sizeof(array[0]));
    Bubble(array, array+sizeof(array)/sizeof(array[0]), Less<int>());
    Bubble(array, array+sizeof(array)/sizeof(array[0]), Greater<int>());
    return 0;
}

你可能感兴趣的:(模板实现通用的冒泡排序)