Вы можете рассмотреть возможность кэширования расстояния между игроком и объектом при его вычислении, а затем использовать это в своем sortfunc
. Это будет зависеть от того, сколько раз ваша функция сортировки просматривает каждый объект, поэтому вам, возможно, придется профилировать, чтобы быть уверенным.
Я понял, что ваша функция сортировки может делать что-то вроде этого:
compare(a,b);
compare(a,c);
compare(a,d);
и вы будете каждый раз вычислять расстояние между игроком и 'a'.
Как уже упоминалось, в этом случае вы можете опустить sqrt
.