|
Как добавить элемент в отсортированный массив?
// есть отсортированный большой массив let arr = ['ABC','BCD','CAE','CBA']; Как добавить элемент 'BAS' сразу в нужное место, т.е. после 'ABC'? // методы arr.push() и arr.unshift() подразумевают использование дальнейшей сортировки массива Как добавить упорядоченно без сортировки? :) |
webgraph,
let arr = ['ABC', 'BCD', 'CAE', 'CBA'],
el = 'BAS';
len = arr.length;
i = 0;
for (; i < len; i++) if (el < arr[i]) break;
arr.splice(i, 0, el);
alert(arr)
|
arr.splice() Если же нужно прям оптимально и супер быстро, ту тут уж придётся бинароное дерево городить вместо массива или типа того. |
Цитата:
Бинарный поиск по отсортированному массиву. Как то так
// ищет в отсортированном массиве arr
// индекс первого элемента >= val
// выдает arr.length, если все элементы < val
const findBinIndex =(arr, val) => {
let nb=0, ne=arr.length-1;
if (val<=arr[0]) return 0;
if (val >= arr[ne]) return ne+1;
let index;
while (true) {
index = ((ne + nb) / 2) | 0;
if (arr[index] <= val)
nb = index;
else
ne = index;
if (ne - nb == 1) {
if (val<=arr[nb]) return nb;
if (val >= arr[ne]) return ne+1;
return ne;
}
}
}
const arr = ['ABC', 'BCD','BCD', 'CAE', 'CBA']
let k, el;
el = 'BAS';
k= findBinIndex(arr, el);
arr.splice(k,0,el);
el = 'AAS';
k= findBinIndex(arr, el);
arr.splice(k,0,el);
el = 'CCS';
k= findBinIndex(arr, el);
arr.splice(k,0,el);
el = 'BCD';
k= findBinIndex(arr, el);
arr.splice(k,0,el);
el = 'CAF';
k= findBinIndex(arr, el);
arr.splice(k,0,el);
console.log(arr)
|
Цитата:
|
Цитата:
|
webgraph, да вон вариант от voraa оптимальный для поставленных условий.
voraa, дерево будет нужно если таких операций много - всё-таки splice сам по себе "тяжёлый". |
Цитата:
|
webgraph, массив в дерево - проводим добавления - дерево растёт - собираем в конце дерево в массив.
Конкретную реализацию писать лень, поугули.) |
Цитата:
|
| Часовой пояс GMT +3, время: 23:28. |
|