Bug in timsort!?

Grant Edwards invalid at invalid.invalid
Tue Feb 24 17:45:58 EST 2015


On 2015-02-24, Roy Smith <roy at panix.com> wrote:

> http://envisage-project.eu/proving-android-java-and-python-sorting-algorithm-is-broken-and-how-to-fix-it/

I don't get it. 

    3.2 Corrected Python merge_collapse function
    
    merge_collapse(MergeState *ms)
    {
        struct s_slice *p = ms->pending;
    
        assert(ms);
        while (ms->n > 1) {
            Py_ssize_t n = ms->n - 2;
            if (     n > 0   && p[n-1].len <= p[n].len + p[n+1].len
                || (n-1 > 0 &&  p[n-2].len <= p[n].len + p[n-1].len)) {
                if (p[n-1].len < p[n+1].len)
                    --n;
                if (merge_at(ms, n) < 0)
                    return -1;
            }
            else if (p[n].len <= p[n+1].len) {
                     if (merge_at(ms, n) < 0)
                            return -1;
            }
            else
                break;
        }
        return 0;
    }    

Or does "Python function" mean something else in this context?



    
-- 
Grant Edwards               grant.b.edwards        Yow! I request a weekend in
                                  at               Havana with Phil Silvers!
                              gmail.com            



More information about the Python-list mailing list