Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 为什么随机选择算法在(低===高)时返回数组[low]处的元素?_Javascript_Algorithm - Fatal编程技术网

Javascript 为什么随机选择算法在(低===高)时返回数组[low]处的元素?

Javascript 为什么随机选择算法在(低===高)时返回数组[low]处的元素?,javascript,algorithm,Javascript,Algorithm,有人能给我解释一下,当第4行**上的if情况为真时,为什么算法返回array[low]处的元素。如果分区在子数组的较大一侧从枢轴+1到高位递归到长度为1,那么顺序是否不存在 function randomizedSelect(array, low, high, order) { var pivot, count; if (low === high) { ** return array[low]; ** } pivot = partition(array, low

有人能给我解释一下,当第4行**上的
if
情况为真时,为什么算法返回
array[low]
处的元素。如果
分区
在子数组的较大一侧从
枢轴+1到高位递归到长度为1,那么
顺序
是否不存在

function randomizedSelect(array, low, high, order) {
  var pivot, count;

  if (low === high) {   **
    return array[low];  **
  }

  pivot = partition(array, low, high); 
  count = pivot - low + 1;
  if (count === order) {
    return array[pivot];
  } else if (order < count) {
    return randomizedSelect(array, low, pivot-1, order);
  } else {
    return randomizedSelect(array, pivot+1, high, order - count);
  }
}
函数随机化选择(数组、低位、高位、顺序){
var枢轴,计数;
如果(低===高){**
返回数组[低]**
}
pivot=分区(数组、低位、高位);
计数=枢轴-低+1;
如果(计数===顺序){
返回数组[pivot];
}否则如果(订单<计数){
返回randomizedSelect(数组,低位,pivot-1,顺序);
}否则{
返回randomizedSelect(数组,pivot+1,high,order-count);
}
}

随机选择算法所做的事情是从索引
之间的数组中选择一个数字。如果索引
low
high
之间存在超过1个数字,则它将跳过
If条件
并进行分区。但是,这里第4行是边缘情况,在低和高之间只有一个数字,即
low
high
基本相同。因此,我们可以返回任何内容,即使您
返回数组[high]
,结果也将与其相同的索引(编号)相同。希望这能对你有所帮助。

你指出了一个明确的、不可否认的事实,事实上我已经看到过这种情况。该算法的问题是,当输入大于array.length-1的
顺序时,它将返回
array.length-1
元素。但是现在我看到,很明显,最初的作者假设操作算法的人知道他们输入的数组的长度,因此,
order
是有界的。快速检查
order>array.length
是否可以消除这种奇怪情况下潜在的误导性输出。