нерекурсивная сортировка слиянием в C ++ - PullRequest
0 голосов
/ 15 октября 2010

Я написал все это, но я получаю смутные ошибки. Я не знаю, что не так ... тьфу. Также вы можете спросить, почему нерекурсивно хорошо, что мой учитель так поступает для теста.

void nonrec_mergesort(vector <int> & a, vector <int> & b, int s, int r)
{

    int m = 1;
    while (m <= r)
    {
        int i = 0;
        while(s < (r-m))
        {
            stl_merge(a, b, i, ((i+i+m-1)/2), (i+m-1));
            stl_merge(a, b, i+m, (min(i+2*m-1,r-1)+(i+m))/2, min(i+2*m-1,r-1));
            s = s + (2*m);
        }
        m = m * 2;
    }
}

1 Ответ

2 голосов
/ 15 октября 2010

Эта ссылка должна ответить на ваши вопросы о сортировке слиянием снизу вверх, но вы не предоставили достаточно информации, чтобы легко вам помочь.

http://www.algorithmist.com/index.php/Merge_sort

Input: array a[] indexed from 0 to n-1.

    m = 1
    while m <= n do
        i = 0
        while i < n-m do
            merge subarrays a[i..i+m-1] and a[i+m .. min(i+2*m-1,n-1)] in-place.
            i = i + 2 * m
        m = m * 2
...