개념 설명: 선형 탐색은 배열의 처음부터 끝까지 순차적으로 탐색하는 가장 기본적인 탐색 알고리즘입니다. 정렬되지 않은 배열에서도 사용할 수 있는 장점이 있습니다.
처리 과정 순서:
# Python
def linear_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i # 찾은 원소의 인덱스 반환
return -1 # 원소를 찾지 못한 경우
// C
int linearSearch(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target)
return i;
}
return -1;
}
// Java
public class LinearSearch {
public static int linearSearch(int[] arr, int target) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target)
return i;
}
return -1;
}
}
개념 설명: 이진 탐색은 정렬된 배열에서 중간값을 기준으로 탐색 범위를 절반씩 줄여가며 찾는 알고리즘입니다. 매우 효율적인 탐색 방법이지만, 배열이 정렬되어 있어야 합니다.
처리 과정 순서:
# Python
def binary_search(arr, target):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# 재귀적 구현
def binary_search_recursive(arr, target, left, right):
if left > right:
return -1
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return binary_search_recursive(arr, target, mid + 1, right)
else:
return binary_search_recursive(arr, target, left, mid - 1)
// C
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target)
return mid;
if (arr[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
// Java
public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target)
return mid;
if (arr[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
}