我有一個有序數組,它旋轉了n次,n是未知的。現在我想在O(nlog n)中使用二分搜索搜索一個元素。我實現了以下代碼,它工作正常。 但我認爲條件如果((結束開始)== 1)可以通過做一些修改, 可以跳過任何人建議?在旋轉N次的數組中搜索一個元素
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)的 – Christian 2011-05-10 06:43:26
您的壓痕是不正確的:\的[在排序和旋轉陣列搜索(HTTP – shevski 2011-05-10 06:44:13
可能重複://計算器.com/questions/4773807 /在排序和旋轉陣列中搜索) – codaddict 2011-06-06 09:57:45