k-旋转移位阵列并找到x?

时间:2015-03-17 16:56:36

标签: c++ algorithm search data-structures binary-search

我们对一个数组说k-rotated-shifted array,这样就可以对k旋转进行排序。例如:A=[10, 15, 20, 1, 7]k=2。我提出了一种算法,用于在这个k旋转移位的数组中找到像x这样的密钥。

有人可以帮我核实一下吗?

enter image description here

编辑1:我的新代码是:

 int S(int l, int r, int x)
{ int f=A[l], m=A[(l+r)/2], la=A[l];
if (x==f or x==m or x==la)
     return 1;
else {if ((x< f and x>m) || (x>f and x>m) || (x<f and x<m))
   return S((l+r)/2, r, x);
   else
    return S(l,(l+r)/2, x);
}
}

1 个答案:

答案 0 :(得分:3)

在3,4,5,1,2中找到1。断开查找不存在的键,因为基本情况仅在找到键时触发,从而导致无限循环。

要修复,请使用条件

first < middle < x or middle < x < first or x < first < middle.

另请注意,如果我们采用last的上限,则与(i + j) / 2进行比较是多余的。