이진 검색
오늘은 "이진 검색"에 대해 이야기하겠습니다. 이진 검색의 개념은 매번 순차 배열에서 특정 배열의 중간 숫자와 크기를 비교하는 것입니다. 이진 검색의 단점은 배열이 순차적이어야 한다는 것입니다(예를 들어 작은 것부터 큰 것까지 데이터를 정렬했습니다). 장점은 쿼리 효율성이 매우 높고 시간 복잡도가 log2n이라는 것입니다. 빅데이터에서 이 검색 방법을 많이 사용할수록 그 효과는 더욱 분명해질 것입니다. 소스 코드와 단위 테스트는 아래에 첨부되어 있습니다. 소스 코드에는 루프 알고리즘과 재귀 알고리즘이 포함되어 있습니다.
소스 코드:
///
/// 바이너리 방식을 사용하여 데이터 문제의 위치를 찾습니다. (재귀적 방법)
/// 배열은 작은 것부터 큰 것 순으로 정렬해야 합니다. 정렬되지 않은 데이터인 경우에는
/// 또는 < cref를 참조하세요. = "StraightInsertionSort"/>
/// 찾으려는 값이 배열에 없으면 -1을 반환합니다.
/// & lt;//summary & gt;
//// & lt; 매개변수 이름 = "배열" & gt; 배열 & lt;/param & gt; lt; "value" & gt; 찾을 값
///
) { return array.Length - 1 }
return Search(array, 0, array.Length - 1, value);
}
private static int Search(int[] array, int BeginIndex, int endIndex, int value)
int middle = (beginIndex + endIndex) / 2;
if (endIndex == startIndex)
{ return array[beginIndex] == value ? startIndex : -1 ; }
else if (endIndex == startIndex + 1)
y[endIndex] == 값 ) { return startIndex; } 그렇지 않은 경우( 배열[중간 ; (루프 방식)
/// 배열은 작은 것부터 큰 것 순으로 정렬해야 합니다. 정렬되지 않은 데이터인 경우에는
/// 또는< cref= "StraightInsertionSort"/> 정렬용 클래스입니다.
/// 찾으려는 값이 배열에 없으면 -1을 반환합니다.
~ ; 찾을 값
///
int startIndex = 0;
int endIndex = array.Length - 1;
while(true)
<= 1)
~ 🎜> -1; }
~ if (값 < 배열[중간]) { endIndex = 중간; }
if (값 == 배열[중간]) { return middle; }
if (값 > 배열[중간]) { startIndex = middle; }
}
}
单元测试:
[TestMethod()]
[DeploymentItem("ZjyWorkCodeLibrary.dll")]
공개 무효 SearchTest()
{
Random 무작위 = new Random();
int[] array2 = new int[100];
for (int i = 0; i < 100; i++)
{
array2[i] = 무작위.다음(0, 1000);
}
int[] array3 = BitmapSort.Sort(array2);
for (int i = 0; i < array3.Length; i++)
{
Assert.AreEqual(BinarySearch.Search(array3, array3[i]), i);
Assert.AreEqual(BinarySearch.Search2(array3, array3[i]), i) ;
}
Assert.AreEqual(BinarySearch.Search(array3, 9999), -1);
Assert.AreEqual(BinarySearch.Search2(array3, 9999), -1);
}
更多多分法查找介绍상关文章请关注PHP中文网!