C#のバイナリサーチアルゴリズム

バイナリサーチであるバイナリ検索アルゴリズムは、例えば、規則配列目標数は、配列インデックスにある挿入する必要がありますどのくらいを見て?

次のように配列を仮定します。

INT [] NUMS = { 1356 }。

目標値の指標値を算出する配列内に挿入されます。アイデアの始まり:

1.最初の目標数は、配列中に挿入されます

2.ソート

3.リターン・インデックス

コードは以下の通りであります:

  公共 INT SearchInsert(INT [] NUMS、int型のターゲット){
  int型のインデックス= System.Array.IndexOf(NUMS、ターゲット)
        もし(インデックス> = 0 
        { 
            リターン指数。
        } 
        { 
            リスト < INT >リスト= nums.ToList()。
            list.Insert(nums.Length、ターゲット)
            NUMS = list.ToArray()。
            System.Array.Sort(NUMS、(NUM1、NUM2) => { 戻り num1- NUM2を;});
            リターンSystem.Array.IndexOf(NUMS、ターゲット)
        } 
    }

次のような学習は、二分法を解決するために、後で使用することができます。

 パブリック 静的 INT SearchInsert(INT [] NUMS、int型のターゲット){
         int型スタート= 0 ; // インデックス開始
        INTのエンドnums.Lengthを= - 1 ; // エンドインデックス
        INT MID = 0 ; // 中間インデックスを取得
        しながら(スタート< = 完)
        { 
            MID =スタート+(終了-開始])/ 2 ;
             IF(ターゲット== NUMS [MID]){ 戻りMIDを;}
             IF(NUMS [MID]> ターゲット) 
            {
                終了 =半ば- 1 
            } 
            そう であれば(NUMS [中間] < ターゲット)
            { 
                起動中間+ = 1 ; 

            } 
        } 
        戻り始めます。
    }

コード分​​析:

アイデアは、バイナリを見つけることです

1.ルックを定義します。開始、終了と終了インデックスの開始インデックス

2.ダウンバイナリ狭いすなわち半ば=(終了 - 開始)+開始/ 2;数値オーバーフローを防ぎます

宛先番号が半分数より大きい場合、数値範囲の右半分に挿入されなければならない、変更開始=ミッド+ 1の開始を見つけることが必要である。すなわち、次の半分の数の後に

宛先数が半数未満である場合、番号は左半分に挿入されなければならない、それは範囲の終わりを見つける必要がある=端に低減される中間-1、即ち、前半の数

3.手順を繰り返し、再び半減されるバイナリニーズを発見していない2

 

おすすめ

転載: www.cnblogs.com/97310ZT/p/10974279.html
おすすめ