알고리즘 개요 및 소개
이진 검색 알고리즘(Binary Search Algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있다.
검색 원리상 정렬된 리스트에서만 사용할 수 있다는 단점이 있지만, 검색이 반복될 때 마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠르다는 장점이 있다.
시간 복잡도 | O(logN) |
장점 | 원하는 값을 찾고자할 때 빠르게 찾을 수 있다. |
단점 |
정렬이 된 데이터에서만 탐색이 가능하다. |
소스코드
#include<iostream>
constexpr int MAX = 15;
int data = 12;
void Binary_Search(int* list,int min,int max) {
int mid = (min + max) / 2;
if (list[mid] == data) { std::cout << "find Data: " << list[mid]<<"in: "<<mid; return; }
else if (list[mid] < data)
Binary_Search(list, mid + 1, max);
else
Binary_Search(list, min, mid-1);
}
int main() {
int list[MAX]{ 1,2,3,4,5,6,6,7,7,8,9,10,11,12,13};
Binary_Search(list, 0, MAX);
}
재귀 함수를 이용하여 구현한 이진 검색(Binary Search)
후기
탐색 알고리즘 중 하나인 이진 탐색을 재귀함수를 이용하여 구현하였다. 여러 곳에서 응용이 되는 알고리즘인 만큼 숙지가 필수이다.
출처 및 레퍼런스
Wiki: https://ko.wikipedia.org/wiki/이진_검색_알고리즘
'자료구조 알고리즘 > 탐색 알고리즘(Search)' 카테고리의 다른 글
[알고리즘] 다익스트라 알고리즘(Dijkstra algorithm) (0) | 2020.02.25 |
---|---|
[알고리즘] 합집합 찾기(Union-Find) (0) | 2020.02.14 |
[알고리즘] 최소 비용 신장 트리(Minimum Cost Spanning Tree) (0) | 2020.02.11 |
[알고리즘] 깊이 우선 탐색(Depth First Search) (0) | 2020.02.03 |
[알고리즘] 너비 우선 탐색(Breadth First Search) (0) | 2020.01.31 |