Я деталей не скажу, но насколько мне известно, там просто выполняется перебор, пока не будет достигнуто состояние, когда результат уже не меняется. То есть количество циклов может быть больше, чем кол-во элементов массива (потому что помимо >0 и <0 есть еще и 0 (когда сравниваемые элементы совпадают)). И да, не обязательно 1 и -1, можно именно меньше и больше нуля, и именно по этому самая коротка конструкция для сортировки числовых массивов - arr.sort((a,b) => a-b)