[순차 탐색(Sequential Search)]
순차 탐색(Sequential Search)은 가장 기본적인 탐색 알고리즘 중 하나로, 리스트의 첫 번째 요소부터 마지막 요소까지 순차적으로 탐색하여 원하는 값을 찾는 방법입니다.
리스트가 정렬되어 있지 않은 경우에도 사용할 수 있으며, 구현이 매우 간단합니다.
순차 탐색 작동 원리
- 리스트의 첫 번째 요소부터 시작하여 하나씩 확인합니다.
- 현재 요소가 찾고자 하는 값과 일치하면, 해당 요소의 인덱스를 반환합니다.
- 끝까지 탐색했는데도 찾고자 하는 값을 발견하지 못하면, 값이 리스트에 없다는 뜻이므로 -1을 반환합니다.
순차 탐색 의사 코드
함수 sequentialSearch(arr, key):
for i = 0부터 arr의 길이까지:
if arr[i] == key:
반환 i // key의 인덱스 반환
반환 -1 // key를 찾을 수 없는 경우
순차 탐색 예제
예제 리스트: [64, 25, 12, 22, 11]
찾고자 하는 값: 22
1. 리스트의 첫 번째 요소 64와 22를 비교합니다. 일치하지 않으므로 다음 요소로 이동합니다.
2. 두 번째 요소 25와 22를 비교합니다. 일치하지 않으므로 다음 요소로 이동합니다.
3. 세 번째 요소 12와 22를 비교합니다. 일치하지 않으므로 다음 요소로 이동합니다.
4. 네 번째 요소 22와 22를 비교합니다. 일치하므로 해당 요소의 인덱스 3을 반환합니다.
순차 탐색 코드
#include <iostream>
#include <vector>
using namespace std;
// 순차 탐색 함수
// arr: 탐색할 배열, key: 찾고자 하는 값
int sequentialSearch(const vector<int>& arr, int key)
{
// 배열의 모든 요소를 순차적으로 탐색
for (int i = 0; i < arr.size(); i++)
{
// 현재 요소가 찾고자 하는 값과 같으면 인덱스를 반환
if (arr[i] == key)
{
return i;
}
}
// 찾고자 하는 값을 배열에서 찾지 못하면 -1 반환
return -1;
}
int main()
{
vector<int> arr = {64, 25, 12, 22, 11}; // 예제 배열
int key = 22; // 찾고자 하는 값
// 순차 탐색 수행
int result = sequentialSearch(arr, key);
// 결과 출력
if (result != -1)
{
cout << "값 " << key << "을(를) 인덱스 " << result << "에서 찾았습니다." << endl;
}
else
{
cout << "값 " << key << "을(를) 배열에서 찾을 수 없습니다." << endl;
}
return 0;
}
순차 탐색의 장단점
장점 :
- 간단한 구현: 알고리즘이 단순하여 구현하기 쉽습니다.
- 정렬 불필요: 데이터가 정렬되어 있지 않아도 사용할 수 있습니다.
- 작은 데이터에 효율적: 데이터의 크기가 작을 때는 효율적입니다.
단점 :
- 비효율성: 데이터의 크기가 커질수록 탐색 시간이 길어져 비효율적입니다.
- 최악의 경우: 최악의 경우 모든 요소를 탐색해야 합니다.
시간 복잡도
- 최선의 경우: O(1)O(1) (찾고자 하는 값이 배열의 첫 번째 요소일 때)
- 최악의 경우: O(n)O(n) (찾고자 하는 값이 배열의 마지막 요소일 때 또는 배열에 없을 때)
- 평균의 경우: O(n)O(n)
'자료구조' 카테고리의 다른 글
자료구조 - 색인 순차 탐색 (0) | 2024.06.11 |
---|---|
자료구조 - 이진 탐색 (1) | 2024.06.11 |
자료구조 - 정렬 알고리즘의 비교 (0) | 2024.06.11 |
자료구조 - 기수 정렬 (0) | 2024.06.11 |
자료구조 - 퀵 정렬 (0) | 2024.06.11 |