Из книги Седжвик & Кевин Уэйн Алгоритмы 4-е изданиеMerge Сортировать Базовый вариант (рекурсия) Проанализируйте
В рекурсии код базового варианта часть
if(end <= start)
{
return;
}
Но я проверил end
никогда не станет ниже индекс start
. только end = start
происходят, когда осталось только 1 элемент. Тогда почему <=
меньше оператора, где работает только одно условие, равное =
работает постоянно?
Предположим, что имеется массив a[8,5,3]
.
Теперь средняя точка первого индекса так после разрыва
a[8,5] and a[3]
divide(a,0,1) and divide(a,2,2), merge(a,0,1,2)
начало меньше, чем в концеdivide(a,0,1)
иstart=end
происходит в вызове функцииdivide(a,2,2)
.
Теперь середина - это 0-й индекс.
a[8] and a[5]
divide(a,0,0) and divide(a,1,1), merge(a,0,0,1)
здесь как в вызове функцииstart=end
является единственно верным.
так буквально end
никогда не становилась меньше start
таким образом end<start
никогда не бывает. только end=start
.
Может ли кто-нибудь объяснить мне, почему мы используем оператор < (меньше) в базовом случае сортировки слияния?
Полных Рекурсивный Код
int divide(int a[], int start, int end)
{
int mid;
if(end<=start)
{
return;
}
else
{
mid = (start+end)/2;
divide(a, start, mid);
divide(a, mid+1, end);
merge(a, start, mid, end);
}
}
ли у вас есть условие, как 'если (конец = start) '? не 'if (end == start)'? –
@MuhammadAhmad, спасибо! да, это работает, если я пишу '(end == start)' – michel