В общем случае сортировка занимает время O ( n log n ), тогда как время O ( n ) должно быть достаточным.Для решения O ( n ) вы можете использовать цикл for
с zip
:
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
ind = [6, 4, 3, 9, 10, 8, 1, 5, 2, 7, 0]
res = [0] * len(b)
for val, idx in zip(b, ind):
res[idx] = val
# [11, 7, 9, 3, 2, 8, 1, 10, 6, 4, 5]
list.insert
здесь не подходит, так как вы не можетеполучить доступ к индексам, которых еще нет в списке.Так как вы заранее знаете размер вашего результата, вы можете просто создать экземпляр списка с таким размером.
Вы также можете использовать стороннюю NumPy , которая поддерживает векторизованную индексацию:
import numpy as np
b = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
ind = np.array([6, 4, 3, 9, 10, 8, 1, 5, 2, 7, 0])
res = np.empty(b.shape)
res[ind] = b
# array([11., 7., 9., 3., 2., 8., 1., 10., 6., 4., 5.])