C#의 Array.BinarySearch() 메서드는 1차원 정렬된 배열에서 지정된 범위에 속한 요소들을 대상으로 특정 값을 검색합니다. 비교 작업은 배열의 각 요소와 검색하려는 값이 구현한 IComparable 인터페이스를 기반으로 수행됩니다.
참고: 이진 탐색은 배열이 오름차순으로 정렬되어 있어야만 올바른 결과를 보장합니다.
구문
메서드의 구문은 다음과 같습니다.
public static int BinarySearch(Array arr, int index, int len, object val);
매개변수 설명
- arr: 검색 대상인 1차원 배열
- index: 검색을 시작할 범위의 시작 인덱스
- len: 검색할 범위의 길이(요소 개수)
- val: 찾으려는 값(객체)
반환값
- 값을 찾은 경우: 해당 요소의 인덱스
- 값을 찾지 못한 경우: 음수 (검색 범위 안에 값이 존재하지 않음을 의미)
예제 1 – 범위 내에서 값 찾기
다음 예제에서는 인덱스 1부터 길이 3만큼의 범위에서 값 20을 검색합니다.
using System;
public class Demo {
public static void Main() {
int[] intArr = {10, 20, 30, 40, 50};
Array.Sort(intArr);
Console.WriteLine("배열 요소...");
foreach(int i in intArr) {
Console.WriteLine(i);
}
Console.Write("요소 20의 인덱스 = " + Array.BinarySearch(intArr, 1, 3, 20));
}
}출력 결과
배열 요소... 10 20 30 40 50 요소 20의 인덱스 = 1
검색 범위(인덱스 1~3)에 값 20이 포함되어 있으므로, 결과적으로 인덱스 1이 반환됩니다.
예제 2 – 범위 밖의 값 검색 시 음수 반환
이번에는 검색 범위를 인덱스 0부터 길이 2까지로 제한하고 값 25를 검색해 보겠습니다.
using System;
public class Demo {
public static void Main() {
int[] intArr = {5, 10, 15, 20};
Array.Sort(intArr);
Console.WriteLine("배열 요소...");
foreach(int i in intArr) {
Console.WriteLine(i);
}
Console.Write("요소 25의 인덱스 = " + Array.BinarySearch(intArr, 0, 2, 20));
}
}출력 결과
배열 요소... 5 10 15 20 요소 25의 인덱스 = -3
검색 범위(인덱스 0~1)에는 값이 존재하지 않으므로 음수인 -3이 반환됩니다. 이처럼 반환값이 음수라면 지정한 범위 안에서 해당 값을 찾지 못했다는 의미로 해석하면 됩니다.