有人可以向我解释为什么当第4行的array[low]
情况为真时,算法会在if
返回元素。如果order
在partition
的子阵列的GREATER侧递归到1的长度,则pivot+1 to high
不能存在吗?
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);
}
}
答案 0 :(得分:0)
随机选择算法的作用是从位于索引low
到high
之间的数组中选择一个数字。如果索引low
和high
之间存在多个数字,则它将跳过if condition
并转到分区。但是,这里第4行是边缘情况,其中只有一个数字存在于低和高之间,即low
和high
基本相同。因此,即使您return array[high]
,我们也可以返回任何内容,结果将与其相同的索引(数字)相同。希望这可能对你有所帮助。