0

配列の最後の 50 要素に到達するまで、どのように配列をループしますか?? 次のバイナリ検索コードがあるとします。

public class Binary
{
public static final int NOT_FOUND = -1;


public static <AnyType extends Comparable<? super AnyType>>
              int binarySearch( AnyType [ ] a, AnyType x )
{
    int low = 0;
    int high = a.length - 1;
    int mid;

    while( low <= high )
    {
        mid = ( low + high ) / 2;

        if( a[ mid ].compareTo( x ) < 0 )
            low = mid + 1;
        else if( a[ mid ].compareTo( x ) > 0 )
            high = mid - 1;
        else
            return mid;
    }

    return NOT_FOUND;     // NOT_FOUND = -1
}

// Test program
public static void main( String [ ] args )
{
    int SIZE = 8;
    Integer [ ] a = new Integer [ SIZE ];
    for( int i = 0; i < SIZE; i++ )
        a[ i ] = i * 2;

    for( int i = 0; i < SIZE * 2; i++ )
        System.out.println( "Found " + i + " at " +
                             binarySearch( a, i ) );

  }
}

この配列の最後の 50 要素に到達するまで、指定された配列を検索したいと思います。その後、検索は 50 要素の順次検索で終了します。私の質問は、そのようなループをどのように構築し、線形検索を行うメソッドにジャンプするかということです。

4

1 に答える 1

0

を計算する前にmid、次のようにしてください

if(high - low + 1 <= 50) return linearSearch(low, high, a, x);

次に、linearSearchイテレータ from lowto highto find x、または returnを実行する必要がありますNOT_FOUND

于 2013-11-17T11:32:09.677 に答える