找到循环排序数组中的最小元素

krr*_*hna 5 c algorithm

我已经尝试了以下代码来找出循环排序数组中的最小元素.但是当low = 1和high = 2时它会失败,因为mid总是1而且[mid] = a [1]总是大于a [high].

我试图在这里使用二进制搜索来找到解决方案.

//finding the minim element in the cyclic sorted array
int arrC[]={10,13,1,3,4,5,8};
int low=0,high =6;
int mid=0,reset =1;
while (low < high)
{
    mid = (low+ high)/2;
    if (arrC[mid]>arrC[high])
    {
        low = mid;
    }
    else if (arrC[mid] < arrC[high])
    {
        high = mid;

    }
}
printf("minimum element is %d",arrC[mid+1]); 
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 2

使用普通的二分搜索,但如果arrC[high] < arrC[low],则视为arrC[high]无穷大以考虑回绕。为此,只需更改该行:

if (arrC[mid]>arrC[high])
Run Code Online (Sandbox Code Playgroud)

到:

if (arrC[high] < arrC[low] || arrC[mid] > arrC[high])
Run Code Online (Sandbox Code Playgroud)