我们对一个数组说k-rotated-shifted array
,这样就可以对k旋转进行排序。例如:A=[10, 15, 20, 1, 7]
,k=2
。我提出了一种算法,用于在这个k旋转移位的数组中找到像x
这样的密钥。
编辑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);
}
}
答案 0 :(得分:3)
在3,4,5,1,2中找到1。断开查找不存在的键,因为基本情况仅在找到键时触发,从而导致无限循环。
要修复,请使用条件
first < middle < x or middle < x < first or x < first < middle.
另请注意,如果我们采用last
的上限,则与(i + j) / 2
进行比较是多余的。