Řazení pole jsem tu již zmiňoval. Drobnou úpravou můžete quicksort funkci upravit, aby nepracovala jen s polem čísel, ale třeba s polem polí a řadit jen podle některých jeho prvků. A nebo se mrkněte, zda se vám nebude hodit BIS_fnc_sortBy

BI do svého seznamu funkcí zařadila hodně variabilní funkci BIS_fnc_sortBy, jejíž autorem by dle popisku v helpu měl být Jiri Wainar.

Funkce přijímá za parametr pole o pěti parametrech.

Prvním je pole, které se má řadit. Druhým jsou speciální parametry,
které můžeme potřebovat do funkce předat (pak jsou dostupné jako
_input0,_input1,…). Často půjde o prázdné pole. Třetí parametr je
algoritmus (funkce), pode kterého bude funkce prvky řadit (výchozí je {_x}).
Čtvrtý parametr je textový řetězec, který popisuje, zda se prvky řadí
vzestupně (ASCEND) nebo sestupně (DESCEND) a pátým je filtrační funkce, kterou můžeme určit, které prvky budou z řazení vyňaty, pokud chceme funkcí prvky i profiltrovat.

Pokud se vrátíme k našemu příkladu s vlastní funkcí a Quicksortem,
pak BIS_fnc_sortBy by se volal:

_arr = [1,2,300,5,125,7,54478,7,89,54,54,4,58,8,94,4,540];
[_arr,[]] call BIS_fnc_sortBy;
hint format ["%1",_arr];

Ideální je samozřejmě použít ji při složitějších podmínkách.
Například pokud máme seznam aut a chceme zjistit, které je nejbližší, pak
můžeme například použít:

_closestCar = [[car1,car2,car3],[],{player distance _x},"ASCEND"] call BIS_fnc_sortBy;

a nebo obdobně pokud chceme najít nejvzdálenější nepojízdné auto
vůči někomu, kdo bude teprve předán třeba jako parametr do funkce:

celo_fnc_findCarForDelete = {
   _unit = _this;
   [car1,car2,car3],[_unit],{_input0 distance _x},"DESCEND",{!canMove _x}] call BIS_fnc_sortBy;
};
deleteVehicle ((leader player) call celo_fnc_findCarForDelete);

Jistě sami najdete vlastní uplatnění této funkce.