Advertisement
vit134

Отсортировать массив (Яндекс)

Nov 9th, 2018
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Отсортировать массив, используя значения второго массива в качестве индексов
  3.     Есть два массива одинаковой длины. В одном лежат значения, во втором — целые числа от 0 до N-1, где N — длина первого массива. Нужно реализовать функцию, которая делает in-place сортировку значений первого массива, используя значения из второго массива в качестве индексов. Решение должно работать за константную память.
  4.     Например,
  5.     var array = [3, 6, 5, 1];
  6.     var order = [3, 1, 2, 0];
  7.  
  8.     sort(array, order); // -> [1, 6, 5, 3]
  9. */
  10.  
  11. // Решение с константной памятью через итератор, который проходит массив с начала до конца, меняя элементы местами, если необходимо.
  12. function sort(array, order) {
  13.   for(var i = 0; i < order.length; i++) {
  14.     if(i === order[i]) {
  15.       continue;
  16.     }
  17.  
  18.     var pairI = order[i];
  19.     while(i !== order[pairI]) {
  20.       pairI = order[pairI];
  21.     }
  22.     swap(array, i, order[i]);
  23.     swap(order, i, pairI);
  24.   }
  25.  
  26.   return a;
  27. }
  28.  
  29.  
  30. // Решение за один проход с использованием массива order в качестве выходного
  31. function sort(array, order) {
  32.   for (var i = 0; i < order.length; i++) {
  33.     order[i] = array[order[i]];
  34.   }
  35.   return order;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement