일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- string
- 연결리스트
- 테트리스
- 문자열
- 파일입출력
- 구조체
- 버블
- 콘솔
- Windows API
- 삽입
- 알고리즘
- C
- 공백
- 이진탐색#binary_search
- 3차원 배열
- 함수
- 난수
- 선택
- C언어
- Time
- 구현
- 셀
- 배열
- 오목#함수#gotoxy#금수#알고리즘#2차원#배열#실무#프로젝트
- crud
- 커서
- 포인터
- 정렬
- scanf
Archives
- Today
- Total
C언어 알고리즘 정리 및 실무 프로젝트
C언어의 이진탐색(binary search) 알고리즘 본문
반응형
데이터를 반으로 나눈 후, 중간 값을 이용해 특정 값을 탐색하는 알고리즘이다.
중간 값을 기준으로 작고 큶을 비교해야 하기 때문에 반드시 데이터가 정렬되어 있어야 한다.
추가 응용 방법(알고리즘을 공부하고 싶으신 분들은 다음 사례로 함수를 Customizing해보세요.)
1: 내림차순으로 정렬된 데이터에서도 값을 탐색하게 한다.
2: 특정 수가 아닌, boolean(탐색 여부) 또는 int(탐색하기 위해 반복된 횟수) 값을 리턴하게 한다.
3: 매개변수의 형태를 변경하여 이진 탐색을 구현
#include <stdio.h>
int binary_search(int[], int, int); // 매개변수: 탐색할 배열, 배열 요소의 개수, 찾으려는 수
// 리턴 값: 해당 수의 위치(인덱스)
int main() {
int a[10] = { 1, 5, 9, 16, 23, 32, 48, 55, 78 }; // 오름차순 정렬된 9개의 데이터
printf("%d",binary_search(a,9,32)); // 5
return 0;
}
int binary_search(int arr[], int count, int answer){
int start = 0; // 배열의 시작
int end = count-1; // 배열 요소의 개수 - 1 = 배열의 마지막 인덱스
while(start<=end){
int mid = (start+end)/2; // 현재 배열의 중간
if(arr[mid]==answer){ // 탐색이 성공하면, 그 수의 위치(인덱스)를 리턴
return mid;
}else if(arr[mid]>answer){ // 중간 값이 찾으려는 값보다 크면
end = mid-1; // 중간 값 바로 이전까지 탐색
}else{ // 중간 값이 찾으려는 값보다 작으면
start = mid+1; // 중간 값 바로 다음부터 탐색
}
}
return -1; // 찾지 못하면 -1을 리턴
}
반응형
'C언어 알고리즘' 카테고리의 다른 글
C언어의 완전탐색(exhaustive search) 알고리즘 (순열, 재귀함수) (0) | 2023.06.13 |
---|---|
C언어의 병합정렬 (merge_sort) 알고리즘 (0) | 2022.06.25 |
C언어 포인터를 활용한 문자열 관련 함수(strcpy, strcat, strcmp, strncmp, strlen) 직접 구현하기 (4) | 2022.05.20 |
C언어 이중 for문과 배열을 이용한 달팽이 배열 알고리즘 (0) | 2022.05.20 |
C언어 연결리스트 구현(포인터에 대한 완벽 이해) (0) | 2022.04.20 |
Comments