Javascript 为什么随机选择算法在(低===高)时返回数组[low]处的元素?
有人能给我解释一下,当第4行**上的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
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
是否可以消除这种奇怪情况下潜在的误导性输出。