Wie kann ein Array bei einem Array von Zielindizes direkt sortiert werden?

Wie würden Sie ein bestimmtes Array sortierenarr an Ort und Stell gegeben ein Array von Zielindizesind?

Beispielsweise

var arr = ["A", "B", "C", "D", "E", "F"];
var ind = [ 4,   0,   5,   2,   1,   3 ];

rearrange(arr, ind);

console.log(arr); // => ["B", "E", "D", "F", "A", "C"]

arr = ["A", "B", "C", "D"];
ind = [ 2,   3,   1,   0 ];

rearrange(arr, ind);

console.log(arr); // => ["D", "C", "A", "B"]

Ich habe den folgenden Algorithmus ausprobiert, aber er schlägt im obigen zweiten Beispiel fehl.

function swap(arr, i, k) {
  var temp = arr[i];
  arr[i] = arr[k];
  arr[k] = temp;
}

function rearrange(arr, ind) {
  for (var i = 0, len = arr.length; i < len; i++) {
    if (ind[i] !== i) {
      swap(arr, i, ind[i]);
      swap(ind, i, ind[i]);
    }
  }
}

Wie würden Sie dies in O (n) Zeit und O (1) zusätzlichem Raum lösen?

Können Sie einen Beweis dafür liefern, dass Ihr Algorithmus funktioniert?

Hinweis Diese Frage sieht ähnlich aus wiediese, aber hier mutiertind ist erlaubt

Antworten auf die Frage(14)

Ihre Antwort auf die Frage