Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按索引数组重新排列数组(证明)?_Javascript_Arrays_Algorithm - Fatal编程技术网

Javascript 如何按索引数组重新排列数组(证明)?

Javascript 如何按索引数组重新排列数组(证明)?,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,给定数组arr和索引数组ind,以下算法将arr重新安排到位,以满足给定索引: 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(ar

给定数组
arr
和索引数组
ind
,以下算法将
arr
重新安排到位,以满足给定索引:

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]);
    }
  }
}

证明该算法有效的最有说服力的方法是什么?

该算法不起作用,它足以显示一个反例:

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

rearrange(arr, ind);
console.log(arr); // => ["C", "D", "A", "B"]
一个可行的替代方案可能是

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]);
      if (ind[i] < i) {
        i = ind[i]-1;
      }
    }
  }
}
功能交换(arr、i、k){
var-temp=arr[i];
arr[i]=arr[k];
arr[k]=温度;
}
功能重新排列(arr、ind){
对于(变量i=0,len=arr.length;i
此算法不起作用,它足以显示一个反例:

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

rearrange(arr, ind);
console.log(arr); // => ["C", "D", "A", "B"]
一个可行的替代方案可能是

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]);
      if (ind[i] < i) {
        i = ind[i]-1;
      }
    }
  }
}
功能交换(arr、i、k){
var-temp=arr[i];
arr[i]=arr[k];
arr[k]=温度;
}
功能重新排列(arr、ind){
对于(变量i=0,len=arr.length;i
编写一组测试用例,并证明它们通过了。。。?!为什么你认为这个算法首先有效?根据索引,输出不应该是
[“E”、“A”、“F”、“C”、“B”、“D”]
?@gurvinder372。。。?为什么?@deceze除非我遗漏了什么,否则按照
[4,0,5,2,1,3]
重新排列
[“A”,“B”,“C”,“D”,“E”,“F”]
应该给出
[“E”,“A”,“F”,“C”,“B”,“D”]
对吗?由于
E
位于第四个索引,而
A
位于第0个索引..?@gurvinder372不确定您在那里应用了什么逻辑。。。第二个数组似乎包含第一个数组中相同键的值所需的索引
arr[0]
应转到索引
ind[0]
,即
4
,这意味着“A”应转到位置
4
。编写一组测试用例并显示它们通过了。。。?!为什么你认为这个算法首先有效?根据索引,输出不应该是
[“E”、“A”、“F”、“C”、“B”、“D”]
?@gurvinder372。。。?为什么?@deceze除非我遗漏了什么,否则按照
[4,0,5,2,1,3]
重新排列
[“A”,“B”,“C”,“D”,“E”,“F”]
应该给出
[“E”,“A”,“F”,“C”,“B”,“D”]
对吗?由于
E
位于第四个索引,而
A
位于第0个索引..?@gurvinder372不确定您在那里应用了什么逻辑。。。第二个数组似乎包含第一个数组中相同键的值所需的索引
arr[0]
应该转到索引
ind[0]
,即
4
,这意味着“A”应该转到位置
4
。噢,哇!非常感谢您提供了一个简单的反例!我创建了一个。你可能想在那里添加你的建议。哦,哇!非常感谢您提供了一个简单的反例!我创建了一个。您可能想在这里添加您的建议。