죠노이 노트

Binary Search란 






< 그림으로 설명 >



[이진 탐색] 


left, right: 배열(a[0], a[1], ⋯, a[n-1])의 왼쪽, 오른쪽 끝 지점

 초기 값으로 left = 0, right = n-1

 list의 중간 위치 middle = (left + right) / 2로 설정


a[middle]과 x를  비교할 경우 3가지 경우 중에 하나를 고려

⑴ x > a[middle]: left를 middle+1로 설정

⑵ x < a[middle]: right를 middle-1로 설정

⑶ x = a[middle]: middle을 반환



예시) C++


int BinarySearch (int *a, const int x, const int n){    // x - 찾으려는 값, n = 배열의 원소 수 or 찾으려는 배열의 크기


int left = 0, right = n -1;

// 찾거나 left가 right 넘어갈 경우 멈춘다.

while(left <= right){

int middle = (left + right) / 2;    //중간위치 항상 

if(x > a[middle]) left = middle + 1 ;

else if (x < a[middle]) right = middle - 1;

else return middle    //찾앗다.

}


//못 찾았다.

return -1;


}

'개발 > 자료구조' 카테고리의 다른 글

[자료구조] c++ 스택  (0) 2016.11.17
[자료구조] [C++] CircularQueue 사이클 큐  (0) 2016.11.16
q_sort  (1) 2016.11.16
[자료구조] Select Sort  (0) 2016.10.26
Recursive 를 이용한 Permutation Generator (순열 생성기)  (0) 2016.10.25