1) 정렬(sort)이란 여러 원소로 주어진 데터를 정해진 기준에 따라 늘어놓는 작업을 말한다.
Python의 경우 list를 사용하면 굳이 정렬 알고리즘을 구현하지 않아도 된다.(Java도 마찬가지)
- 파이썬 내장 함수 : sorted() // 이는 새로운 list를 만들어냄 ex. L2=sorted(L1)
- list 메서드 : .sort()
2) 탐색(search)이란 여러 원소에서 특정한 값을 찾아내는 작업을 말한다.
- 선형 탐색 (linear search) : 모든 원소에 대해 순차적으로 비교하며 찾는 작업이다. 이는 배열의 길이에 비례하는 소요시간이 걸리며, 시간 복잡도는 O(N)으로 최악의 경우엔 모든 원소를 다 검사해야 한다.
- 이진 탐색 (binary search) : 정렬되어 있는 배열에 한해서 사용할 수 있는 탐색이다. 이때 필요한 데이터는 처음(lower)과 끝(upper) 그리고 중간(middle) 값이 필요하며, 선형 탐색에 비해 탐색 시간이 짧다. 시간 복잡도는 O(logN)
def solution(L, x):
lower = 0
upper = len(L)-1
middle = -1
while lower<=upper:
middle = (lower + upper)//2
if x==L[middle] :
return middle
elif L[middle]<x :
lower = middle + 1
else :
upper = middle - 1
return -1
'CS > 알고리즘' 카테고리의 다른 글
해쉬) 프로그래머스 : 완주하지 못한 선수 / 폰켓몬 (0) | 2022.11.26 |
---|---|
백준 2667번 : 단지 번호 (0) | 2022.06.15 |
백준 2606번 : 바이러스 (0) | 2022.06.07 |
알고리즘의 복잡도 (Complexity of Algorithms) (0) | 2022.04.20 |
재귀 알고리즘(recursive algorithms) (0) | 2022.04.17 |