立即注册 登录
应用思考-教育技术论坛 返回首页

zsyjwx的个人空间 http://www.etthink.com/?79735 [收藏] [复制] [RSS]

日志

快速排序程序

已有 86 次阅读2020-12-22 16:34

template<typename T>
    inline void swap(T& x,T& y)
    {
        T t = std::move(x);
        x = std::move(y);
        y = std::move(t);
    }
    template<typename iterator>
    inline iterator median(iterator& first,iterator& last)
    {
        iterator center=first+(last-first)/2;
        if(*center<*first){
            if(*first<*(last-1))
                STL::swap(*first,*(last-1));
            else if(*(last-1)<*center)
                STL::swap(*center,*(last-1));
            else
                return (last-1);
        }
        else{
            if(*(last-1)<*first)
                STL::swap(*first,*(last-1));
            else if(*center<*(last-1))
                STL::swap(*center,*(last-1));
            else
                return (last-1);
        }
        return (last-1);
    }
    
    template<typename iterator>
    inline iterator partition(iterator& first,iterator& last)
    {
        iterator div=median(first,last);
        iterator i=first-1;
        iterator j=last-1;
        for(;;)
        {
            while(*(++i)<*div);
            while(*(--j)>*div);
            if(i<j)
                STL::swap(*i,*j);
            else
                break;
        }
        STL::swap(*i,*(last-1));
        return i;
    }
   
    template<typename iterator>
    void quick_sort(iterator first,iterator last)
    {
        if(last-first<=1)
            return ;
        iterator i=partition(first,last);
        quick_sort(first,i);
        quick_sort(i+1,last);
    }

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

关注我们:教育技术人

官方微信

官方微博

教育技术热线:

13955453231

学教育技术,上教育技术论坛!

教育技术论坛征稿范围:教育技术应用案例、教程文章、优秀作品等。

Email:sf@etthink.com

Copyright   ©2007-2026  应用思考-教育技术论坛  Powered by©Discuz!  技术支持:且行资源    ( 皖ICP备10014945号-4 )