Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Отсортировать массив, используя значения второго массива в качестве индексов
- Есть два массива одинаковой длины. В одном лежат значения, во втором — целые числа от 0 до N-1, где N — длина первого массива. Нужно реализовать функцию, которая делает in-place сортировку значений первого массива, используя значения из второго массива в качестве индексов. Решение должно работать за константную память.
- Например,
- var array = [3, 6, 5, 1];
- var order = [3, 1, 2, 0];
- sort(array, order); // -> [1, 6, 5, 3]
- */
- // Решение с константной памятью через итератор, который проходит массив с начала до конца, меняя элементы местами, если необходимо.
- function sort(array, order) {
- for(var i = 0; i < order.length; i++) {
- if(i === order[i]) {
- continue;
- }
- var pairI = order[i];
- while(i !== order[pairI]) {
- pairI = order[pairI];
- }
- swap(array, i, order[i]);
- swap(order, i, pairI);
- }
- return a;
- }
- // Решение за один проход с использованием массива order в качестве выходного
- function sort(array, order) {
- for (var i = 0; i < order.length; i++) {
- order[i] = array[order[i]];
- }
- return order;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement