더북(TheBook)
public static bool Contains(uint[] array, uint lookFor) {
    for (int n = 0; n < array.Length; n++) {
        if (array[n] == lookFor) {
            return true;
        }
    }
    return false;
}

알고리즘을 변경하는 대신 타입을 제한하여 양수를 요구하는 식으로 수정했다. 하지만 여전히 데이터 모양에 따라 더 빨라질 여지가 남아 있다. 데이터에 대한 정보가 더 있는가? 배열이 정렬되어 있는가? 만약 그렇다면 숫자가 어디에 있는지 더 많이 가정할 수 있다. 숫자를 배열의 특정 요소 값과 비교한다면 엄청난 수의 요소를 쉽게 삭제할 수 있다(그림 2-1 참조).

▲ 그림 2-1 정렬된 리스트에서 비교 한 번으로 한쪽 요소를 모두 삭제할 수 있다

예를 들어 입력된 숫자가 3이고 이것을 5와 비교한다면 우리는 3이 5의 오른쪽에 없다는 것을 확실히 알 수 있다. 즉, 리스트의 오른쪽 요소들을 바로 삭제할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.