Если вы знаете, что элементы в вашем списке будут варьироваться от наименьшего до максимально возможного значения для данного типа данных, код, который вы просматриваете, не будет работать.Вам придется придумать что-то еще, что, я уверен, можно сделать.Прямо сейчас у меня есть эта книга, и я смотрю на код, который вызывает у вас проблемы, и у меня есть решение, которое будет работать для вас, если вы знаете, что значения варьируются от наименьшего для данного типа данных до наибольшего минусаодин максимум.Откройте эту книгу обратно на страницу 31 и посмотрите на функцию слияния.Строки, вызывающие у вас проблемы, это строки 8 и 9, в которых используется дозорное значение бесконечности.Теперь мы знаем, что два массива уже отсортированы, и нам просто нужно объединить их, чтобы получить массив, который в два раза больше и в отсортированном порядке.Это означает, что самые большие элементы в каждой половине находятся в конце подмассивов, и что самый большой из двух элементов является самым большим в массиве, который в два раза больше, и мы будем сортировать после завершения функции слияния.Все, что нам нужно сделать, это определить наибольшее из этих двух значений, увеличить это значение на единицу и использовать его в качестве нашего стража.Итак, строки 8 и 9 кода должны быть заменены следующими 6 строками кода:
if L[n1] < R[n2]
largest = R[n2]
else
largest = L[n1]
L[n1 + 1] = largest + 1
R[n2 + 1] = largest + 1
Это должно работать для вас.Завтра у меня тест по курсу алгоритмов на эту тему, и я наткнулся на ваш пост здесь и подумал, что помогу вам.Использование авторами часовых в этой книге всегда меня раздражало, и я абсолютно не могу понять, насколько они влюблены в рекурсию.Итерация быстрее и, на мой взгляд, обычно легче придумать и понять.