【发布时间】:2013-06-26 09:39:59
【问题描述】:
我需要在已排序和旋转的数组中搜索一个元素(数组可能包含重复的元素)。排序和旋转数组是指一个排序后的数组旋转了 k 个元素。
int sortedpivot( int arr[], int start , int end , int x)
{
if ( start > end ) return -1;
if ( start == end ) return x== arr[start]? start : -1;
int mid = ( end - start ) /2 + start ;
if ( arr[ mid] == x) return mid;
if ( arr[ mid] > arr[ start])
{
if ( x< arr[ mid] && x>= arr[ start])
return sortedpivot( arr, start , mid-1, x);
else
return sortedpivot( arr, mid + 1, end , x);
}
else
{
if ( x> arr[ mid] && x<= arr[ end])
return sortedpivot( arr, mid+1, end, x);
else
return sortedpivot( arr, start, mid-1 , x);
}
}
上述代码在包含重复元素的数组中失败。任何人都可以提出改进建议吗?
【问题讨论】:
-
如果您使用的是快速排序,我建议将枢轴与最右边的元素交换,然后在对数组进行分区后恢复它。这样你就可以处理重复了。
-
你能解释一下你所说的旋转是什么意思吗?