Потому что 0 тоже валидное значение которое можно вернуть из функции сравнения. Твой вариант тоже можно, только будет чуть больше операций.
А если сортировать последовательно, то сначала сортируй по полю сортировки, потом по isSecond(поднимешь их наверх), потом isFirst поднимай наверх, мне кажется так