Comparator 인스턴스를 구현할 때 compare 메소드를 적잖아요
코드 보니깐 앞에게 뒤에것보다 크면 1, 작으면 -1, 같으면 0 으로 반환하도록 설정해놨던데
main 메소드 안에 static <T> int binarySearch( T[] a, T key, Comparator<? super T> c ) 인, binarySearch메소드가 compare 메소드를 호출하면서 자동으로 정렬이 되는 건가요?
이해가 안되네요;;
compare 메소드가 양수 음수 0을 반환하면서 무슨 원리로 돌아가는지 궁금합니다..
- dc official App
요즘에는 c랑 cpp질문하는 이가 거의 없네.. 음
확실한건 binarySearch 자체는 정렬해주지 않아요. compare로 비교연산하면서 중간에 작으면 앞에가고, 크면 뒤에 가던가 반대던가 하는 함수가 있을 것 같네요
아니면 이런 형식이겠네요
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ljy9378&logNo=221470859271
binary search는 정렬해주지않아요
아 그냥 내부적으로 모든 배열 값을 비교하는 건가요? 무슨 compare메소드에는 반복문도 없어서 딱 한번만 실행 되고 끝나는 것 처럼 보여서요
둘 중 하나라고 봅니다. 1. 중간에 정렬해주는 함수가 있다. 2. binarysearch메소드를 정의한거다 지금 생각은 2번 같네요... 만약 정렬되어있는 값을 넣는다면 저기 있는 binary search 함수안에 compare가 작동하면서, 중간값보다 작으면 -1을 반환하고, -1이 반환되면, 중앙값이 자기 값보다 1보다 커져있는 상태로 다시 함수가 작동되는 거 같네요
네네 내부적으로 배열이랑 비교하는 건데 문제는 정렬되어있는걸 비교해요
아하 그러고보니 코드보니깐 배열은 이미 정렬되어있네요. 근데 반복문도 아니고 배열 안에 있는 값을 여러번 비교 하는건가요? 그냥 compare 안에서 자동으로 여러번 비교 반복 하는건가요??
1 3 5 2 4 이런식으로 들어온 data를 binary search가 하는 것이 아니라 1 2 3 4 5이런식으로 들어온 data를 binary search가 값을 찾아와주는데, 만약 앞에꺼 처럼 섞어서 보내주면 중간에 정렬한다음에 binary search를 작동시키는데, 님 글을 보면 그런것 같진 않고, binary search를 정의 해준 함수처럼 보이네요
예를 들면 1 2 3 4 5라는 data가 주어지면, 중앙값인 3이랑, 자기가 찾으려는 binary search의 data랑 비교해서 그 수보다 작으면, 오른쪽 값을 재설정해서 중앙값-1로 하고, 다시 binary search가 작동되어, 재설정된 오른쪽값인 2랑 가장 왼쪽 값이 1이랑 비교~ 이런식입니다
만약 값이 같으면 compare함수에서 0을 반환하는 경우에는 한번만 작동해요
오른쪽 값인 2랑 가장왼쪽 값 1 의 중앙값인 1(1.5 int로 설정되면 소수점이 버려져서) 과 비교하고, 1도 아니면 다시 binary search가 작동되어 2로 탐색이 들가겠죠
말이 좀 어렵네요.. 음 1 2 3 4 5에서 3이라는 data를 찾으려면 중앙값인 3과 만나 한번 작동 1이라는 data를 찾으려고 하면, 3보다 작으니 binary search 작동 중앙값인 1과 만나 2번 작동 만약 0이라는 숫자를 찾는데, 없으니까 출력이 되지않겠죠