Основная идея вашего алгоритма работает хорошо, и реализация может быть упрощена:
int a[] = {1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1};
int *begin = a;
int *end = begin + 17;
while (begin < end) {
if (*begin == 0)
begin++;
else if (*end == 1)
end--;
else {
*begin = 0;
*end = 1;
}
}
Обратите внимание, что (begin < end)
является более строгим условием для завершения цикла, и в каждой итерации выполняется только одно действие (перемещение указателя или замена значений), что упрощает код и упрощает понимание того, что цикл будет действительно прекратить.