2016-04-16 2 views
0

алгоритм сортировки слиянием являетсябудет ли эта часть кода выполняться в сортировке слияния?

Шаг 1 - если это только один элемент в списке это уже отсортированный, возвращение. Шаг 2 - разделите список рекурсивно на две половины, пока он больше не может быть разделен. Шаг 3 - объедините меньшие списки в новый список в отсортированном порядке.

с этим psedu кодом:

procedure mergesort(var a as array) 
    if (n == 1) return a 

    var l1 as array = a[0] ... a[n/2] 
    var l2 as array = a[n/2+1] ... a[n] 

    l1 = mergesort(l1) 
    l2 = mergesort(l2) 

    return merge(l1, l2) 
end procedure 

procedure merge(var a as array, var b as array) 

    var c as array 

    while (a and b have elements) 
     if (a[0] > b[0]) 
     add b[0] to the end of c 
     remove b[0] from b 
     else 
     add a[0] to the end of c 
     remove a[0] from a 
     end if 
    end while 

    while (a has elements) 
     add a[0] to the end of c 
     remove a[0] from a 
    end while 

    while (b has elements) 
     add b[0] to the end of c 
     remove b[0] from b 
    end while 

    return c 

end procedure 

мой вопрос:

в функции слияния, есть два в то время как цикл, чтобы проверить, если a и b еще есть элементы и добавлять их к массиву c.

мой вопрос будет (может) эти два whiles будет выполняться в той же функции?

или нравится, если a все еще есть предметы, то есть b определенно пуст и наоборот?

+0

Почему ребята вы меня минус? –

ответ

1

Нет. Если оба они все еще не были пустыми, а первое условие было бы истинным.

По завершении первого, по крайней мере один из a, b пуст.