Способ создания массива с нуля в отсортированном порядке - сортировка вставкой. В PHP-иш псевдокод:
$list = []
for ($element in $elems_to_insert) {
$index = binary_search($element, $list);
insert_into_list($element, $list, $index);
}
Хотя на самом деле может оказаться быстрее создать массив в несортированном порядке и затем использовать быструю сортировку (встроенные функции сортировки PHP используют быструю сортировку)
И чтобы найти элемент в отсортированном списке:
function binary_search($list, $element) {
$start = 0;
$end = count($list);
while ($end - $start > 1) {
$mid = ($start + $end) / 2;
if ($list[$mid] < $element){
$start = $mid;
}
else{
$end = $mid;
}
}
return $end;
}
В этой реализации вам нужно будет протестировать $list[$end]
, чтобы увидеть, является ли это элемент, который вы хотите, поскольку, если элемент не находится в массиве, он найдет точку, где он должен быть вставлен. Я сделал это таким образом, чтобы это соответствовало предыдущему примеру кода. Если хотите, вы можете проверить $list[$end] === $element
в самой функции.