Йо! Я хочу отсортировать элементы одного массива согласно элементам другого массива. Как мне это сделать в О(1) памяти (инплейс)?
Так как в массиве с индексами index_array уже есть вся информация о расстановке элементов в массиве со значениями values_array, то сортировать ничего не надо, нужно просто перетасовать массив со значениями в соответствии с этими индексами - за O(n).
Если нет ограничения на использование памяти, можно выделить второй массив и перекидать в него значения из первого по указанным индексам, как вы и сделали, судя по дальнейшим комментариям. Но можно сделать и с памятью О(1) - in place.
Каждый элемент в index_array имеет следующую информацию - текущий индекс этого элемента в values_array и требуемый индекс - где этот элемент должен быть. Можно просто прыгать по index_array, переставляя элементы на нужные места.
Алгоритм следующий:
1. Назначаем два индекса, текущий (где элемент стоит на данный момент) = 0 и требуемый = index_array[0]. Сохраняем значение values_array по текущему индексу в переменную.
2. Если текущий индекс совпадает с требуемым, то этому элементу перестановка не нужна, ищем следующий, который не на месте. Если таких не осталось, конец исполнения.
3. Ставим сохранённое текущее значение на требуемый индекс в values_array. Так как эта операция затрёт элемент, который уже там находится, нужно его предварительно сохранить, как и индекс, который хранится для него в index_array.
4. Сохранённый индекс становится текущим индексом, сохранённое значение текущим значением, переходим на пункт 2.
Я решил эту задачу на Python, могу закинуть в чат, если нужно.