반응형
1. 순차 탐색 (Sequential Search)
데이터들을 하나씩 비교해서 원하는 데이터를 찾는 방법입니다.
public int searchIndex(int data, List<int> list)
{
if (list.Count == 0) return -1;
for (int i = 0; i < list.Count; i++)
{
if (list[i] == data) //원하는 데이터를 찾음
return i; //단, 같은 데이터가 여러개 있어도 제일 앞에 있는 데이터의 index 리턴
}
return -1; //원하는 데이터가 없을 경우
}
2. 이진 탐색(Binary Search)
데이터를 둘로 나누고, 둘 중 원하는 데이터가 있을만한 곳을 찾는 방법입니다.
순차 탐색과는 다르게 데이터들이 이미 정렬을 마친 상태여야 합니다.
public int searchIndex(int data, List<int> list)
{
if (list.Count == 0) return -1;
int startIndex = 0;
int endIndex = list.Count - 1;
while(true)
{
int midIndex = (startIndex + endIndex) / 2;
if (list[midIndex] == data) return midIndex;
else if (list[midIndex] > data) endIndex = midIndex - 1;
else startIndex = midIndex + 1;
if (startIndex == endIndex)
{
if (list[endIndex] == data) return endIndex;
break;
}
}
return -1; //원하는 데이터가 없을 경우
}
반응형
'[Computer Science] > [알고리즘]' 카테고리의 다른 글
[알고리즘] 최단 경로 알고리즘(feat. MinHeap, 다익스트라(Dijkstra) 알고리즘) (0) | 2022.02.11 |
---|---|
[알고리즘] 탐욕 알고리즘(Greedy algorithm) (0) | 2022.02.09 |
[알고리즘] 퀵정렬(Quick sort) (0) | 2022.02.07 |
[알고리즘] 병합정렬(Merge sort) (1) | 2022.02.06 |
[알고리즘] 동적 계획법과 분할 정복 (0) | 2022.02.05 |