【发布时间】:2011-05-10 06:39:33
【问题描述】:
我有一个旋转 n 次的排序数组,n 是未知的。现在我想在 O(nlog n) 中使用二进制搜索来搜索一个元素。我实现了以下代码,它工作正常。 但我认为条件 if((end-start)==1 ) 可以通过进行一些修改来跳过, 有人可以建议吗?
Eg of array 1 2 3 4 5
2 3 4 5 1 //rotated once
代码:
public static int srch(int a[],int start,int end,int key){
if(start>end)
return -1;
if((end-start)==1 ){
if(key==a[start])
return start;
else if(key==a[end])
return end;
else
return -1;
}
int mid = (start+end)/2;
if(a[mid]== key){
return mid;
}
else{
if(a[start] < a[mid] ){
//first half is sorted
if(key>a[mid]|| key <a[start]){
start= mid+1;
}else{
end =mid-1;
}
}else{
//second half is sorted
if(key>a[mid]){
start= mid+1;
}else{
end =mid-1;
}
}
return srch(a, start, end, key);
}
}
有更好/更简单/更有效的解决方案吗?
【问题讨论】:
-
我认为你的意思是 O(log n) 而不是 O(n Log n)
-
你的缩进不对:\
-
您的帖子似乎与以下内容重复:stackoverflow.com/questions/2834652/…
标签: algorithm