Алгоритм просмотрел бегло - похоже на правду.
обьясните пожалуйста почему тут такая запись
Я бы написал так:
int separator = L + (R - L) / 2;
Впрочем, обе записи эквивалентны, но мой вариант понятней.
Подразумевается, что L может быть любым 0 <= L < R.
Предложенные вами варианты дают не правильный результат при L > 0. Проверьте.
separator - целочисленный индекс середины заданного диапазона