5

次のコードを試して、循環ソート配列の最小要素を見つけました。しかし、低 = 1 で高 =2 の場合は失敗します。これは、中が常に 1 であり、a[中]=a[1] が常に a[高] よりも大きいためです。

ここでバイナリ検索を使用して解決策を見つけようとしています。

//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]); 
4

3 に答える 3

2

通常の二分探索を使用しますが、 の場合は、ラップ アラウンドを考慮して無限大としてarrC[high] < arrC[low]扱います。arrC[high]これを行うには、次の行を変更します。

if (arrC[mid]>arrC[high])

に:

if (arrC[high] < arrC[low] || arrC[mid] > arrC[high])
于 2013-08-08T03:26:11.003 に答える