Figure 1: list::sort

typedef list<_Ty, _Ax> _Myt;
typedef _List_val<_Ty, _Ax> _Mybase;

void sort()
    {if (2 <= size())
        {const size_t _MAXN = 15;
        _Myt _X(_Mybase::_Alval), _Arr[_MAXN + 1];
        size_t _N = 0;
        while (!empty())
            {_X.splice(_X.begin(), *this, begin());
            size_t _I;
            for (_I = 0; _I < _N && !_Arr[_I].empty(); ++_I)
                {_Arr[_I].merge(_X);
                _Arr[_I].swap(_X); }
            if (_I == _MAXN)
//                _Arr[_I].merge(_X);        // not merged at end
                _Arr[_I - 1].merge(_X);
            else
                {_Arr[_I].swap(_X);
                if (_I == _N)
                    ++_N; }}
//        while (0 < _N)        // merged from big to small
//            merge(_A[--_N]); }}
        for (size_t _I = 1; _I < _N; ++_I)
            _Arr[_I].merge(_Arr[_I-1]),
        swap (_Arr[_N-1]);