MS
Size: a a a
MS
MS
e
MS
MS
for i = 0..len(indices)
swap(values[i], values[indices[i]]);
swap(indices[i], indices[indices[i]]);
e
def sort_lst_by_idx_lst(value_lst, index_lst):
cur_val_idx = 0
nxt_val_idx = 0
idx_by_order = 0
while idx_by_order < len(value_lst):
if cur_val_idx == nxt_val_idx:
cur_val_idx, nxt_val_idx = idx_by_order, index_lst[idx_by_order]
cur_val = value_lst[cur_val_idx]
idx_by_order += 1
continue
nxt_val = value_lst[nxt_val_idx]
value_lst[nxt_val_idx] = cur_val
index_lst[cur_val_idx] = cur_val_idx
cur_val_idx, nxt_val_idx = nxt_val_idx, index_lst[nxt_val_idx]
cur_val = nxt_val
### Тестирование
tests = [
(
['_', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w'],
[5, 10, 1, 0, 2, 3, 9, 4, 7, 8, 6]
),
(
['w', 't', 'o', 'n', 'e', 'o'],
[4, 3, 5, 1, 2, 0]
),
(
['m', 'o', 'u', 's', 'e'],
[0, 1, 2, 3, 4]
),
(
['m', 'o', 'u', 's', 'e'],
[4, 3, 2, 1, 0]
),
(
['e'],
[0]
)
]
for value_lst, index_lst in tests:
sort_lst_by_idx_lst(value_lst, index_lst)
print(value_lst)
e
['h', 'e', 'l', 'l', 'o', '_', 'w', 'o', 'r', 'l', 'd']
['o', 'n', 'e', 't', 'w', 'o']
['m', 'o', 'u', 's', 'e']
['e', 's', 'u', 'o', 'm']
['e']
MS
MS
e
MS
e
MS
MS
e
e
e
MS
in:
values: ['b', 'o', 'k', 'a', 't', 'r'];
others: [2, 4, 3, 1, 9, 8];
nthers: [8, 6, 7, 9, 4, 5];
out:
values: ['a', 'b', 'k', 'o', 'r', 't']
others: [1, 2, 3, 4, 8, 9]
nthers: [9, 8, 7, 6, 5, 4]
MS
MS
values
, к остальным массивам нужно применить пермутацию являющуюся результатом сортировки values
.