История изменений
Исправление firkax, (текущая версия) :
Если нужен доступ по индексу, и надо учесть возможность работы с большими массивами и замену данных на дырки и обратно, я бы сделал индексное btree (в каждой ноде храним количество не-null элементов под ней) примерно так же как твой вспомогательный массив индексов, но чуть гибче.
Но, если у тебя маленький массив то проще оставить твой вариант и не громоздить лишние структуры данных и код для их обработки.
Других эффективных вариантов скорее всего нет.
Исходная версия firkax, :
Если нужен доступ по индексу, и надо учесть возможность работы с большими массивами и замену данных на дырки и обратно, я бы сделал индексное btree (в каждой ноде храним количество не-null элементов под ней) примерно так же как твой вспомогательный массив индексов, но чуть гибче.
Но, если у тебя маленький массив то проще оставить твой вариант и не громоздить лишние структуры данных и код для их обработки.