首页 > 解决方案 > Quicksort - 分区伪代码检查索引超出范围?

问题描述

如果我有以下分区函数(伪代码):

PARTITION(A,l,r) {
    p = A[r]  
    i = l – 1, j = r    
    while(true) {
       while(A[++i] < p);
    while(A[--j] > p);
       if(i < j) 
          swap(A[i],A[j]);
       else
          swap(A[i], A[r];
          // find and return split point
          return i;       
    }
}

我想我还应该检查 j 是否超出范围(索引 -1)。例如:

21、22、23、24、17

左索引 i 将在元素 21 处停止,因为 21 > 17 (pivot p) 但右索引 j 将变为 -1,因为 24、23、22 和 21 > 17 (pivot p) 所以 A[--j] 会变为 -1 还是不需要索引检查 (<0)?

标签: quicksortpartition

解决方案


推荐阅读