Ваш код пахнет преждевременной оптимизацией.
Избавьтесь от внешнего оператора if, так как в любом случае он вам не очень поможет (внешний цикл не будет выполнен с n <= 1). </p>
Удалите эту магическую константу (10000000) и хитрость (я полагаю).Его трудно читать, он совсем не гибкий (по крайней мере, должен быть константной переменной), и логика плохо выражена при использовании xor вместо == .
Возможно, поменяйте цикл do-while на более легкий для чтения цикл for.(как предложено @Philip Potter)
Теперь ваш код будет выглядеть намного понятнее, но при этом не будет медленнее.Возможно, вы понимаете, что теперь вы уже сохранили некоторые строки кода и некоторые скобки, и, возможно, вы могли бы удалить еще несколько.
Теперь с читаемым кодом вы, наконец, открыты для большей оптимизации, которая была спрятана раньше - смотритедругие сообщения для этого.
Примечание: Не делайте хитрых приемов оптимизации рано. Они вам не помогут любой хорошо.
Редактировать: чтобы прояснить точку; -)
int number_of_intersections (int A[], int n)
{
int intersect = 0;
const int maxIntersections = 10000000;
for (int base = 0; base < n-1; base++)
{
for(int inc = base+1; inc < n; inc++)
{
if (inc - base <= A[base] + A[inc])
{
intersect ++;
if (intersect == maxIntersections) return -1;
}
}
}
return intersect;
}