В чём различие между i++ и i+1, когда речь идёт в о массивах?
i+1 - возвращает значение i+1.i++ - увеличивает значение i на 1, возвращает значение i до увеличения.++i - увеличивает значение i на 1, возвращает новое значение i.
Запись вида i++ добавляет +1, но возвращает старое значение переменной
Запись вида i+1 идентична записи ++i добавляет +1, и возвращает новое значение переменной
То же самое касается декримента, и это работает для других ЯП$a = 0;
$b = 0;
$c = 0;

var_dump($a++); // int(0) 
var_dump($b+1); // int(1) 
var_dump(++$c); // int(1)
UPD: в вашем случае запись if (p[i] < p[i+1]) НЕ меняет значение переменной i, а if (p[i] < p[i++]) - меняет, поэтому работа цикла нарушается.