为什么Randomized-Select算法在(低===高)时返回Array [low]的元素?

时间:2016-02-12 05:53:36

标签: javascript algorithm

有人可以向我解释为什么当第4行的array[low]情况为真时,算法会在if返回元素。如果orderpartition的子阵列的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);
  }
}

1 个答案:

答案 0 :(得分:0)

随机选择算法的作用是从位于索引lowhigh之间的数组中选择一个数字。如果索引lowhigh之间存在多个数字,则它将跳过if condition并转到分区。但是,这里第4行是边缘情况,其中只有一个数字存在于低和高之间,即lowhigh基本相同。因此,即使您return array[high],我们也可以返回任何内容,结果将与其相同的索引(数字)相同。希望这可能对你有所帮助。