ホームページ >php教程 >PHP开发 >二分探索の概要

二分探索の概要

高洛峰
高洛峰オリジナル
2016-12-19 16:29:391778ブラウズ

二分探索

今日は「二分探索」について話します。二分探索の考え方は、逐次配列内の特定の配列の中央の数値とサイズを毎回比較することです。二分検索の欠点は、配列が順次である必要があることです (データを小さいものから大きいものに並べ替える場合を例に挙げます)。利点は、クエリ効率が非常に高く、時間計算量が log2n であることです。この検索方法がビッグデータで使用されるほど、その効果はより明らかになります。ソース コードと単体テストは以下に添付されています。ソース コードには 2 つのアルゴリズムが含まれています。1 つはループ、もう 1 つは再帰です。
ソース コード:

。 (再帰的メソッド)
/// 配列が並べ替えられていないデータの場合は、 クラスを使用できます。 >クラスが並べ替えられます。
/// 検索する値が配列内に存在しない場合は、-1 を返します。 ️ param>
,,,,,,,,,,,,,,,,, if (array == null) { throw new ArgumentException("array is null") }
if (array[array.長さ - 1] == 値) { return array.Length - 1; }
0 、array.Length - 1、value);
private static int Search(int[] array, int beginIndex, int endIndex, int value)
if(endIndex == beginindex){return beginindex}}> (ループメソッド)
/// 配列は小さいデータから大きいデータの順に並べ替える必要があります。並べ替えられていないデータの場合は、 クラスを使用できます。 >クラスが並べ替えられます。
/// 検索する値が配列内に存在しない場合は、-1 を返します。 ️ Param & gt;
/// & lt; return & gt; 検索したい値が配列に存在しない場合は、-1 に戻ります & lt;/return; beginIndex = 0; / 2;
               if (値 if (value == array[middle]) { return middle; }
if (値 > array[middle]) { beginIndex = middle; }
}
}

单元测试:
[TestMethod()]
[DeploymentItem("ZjyWorkCodeLibrary.dll")]
public void SearchTest()
{
ランダムランダム = new Random();
int[] array2 = new int[100];
for (int i = 0; i {
array2[i] =random.Next(0, 1000);
}
int[] array3 = BitmapSort.Sort( array2);
for (int i = 0; i < array3.Length; i++)
{
Assert.AreEqual(BinarySearch.Search(array3, array3[i]), i);
As sert.AreEqual(BinarySearch.Search2 (array3, array3[i]), i);
}
Assert.AreEqual(BinarySearch.Search(array3, 9999), -1);
Assert.AreEqual(BinarySearch.Search2(array3, 9999), -1);
}



更多二分法查找介绍相关文章请关注PHP中文网!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。