배열을 정렬하는 것은 배열 안에 있는 원소들을 정해진 규칙에 따라서 새로 늘어놓는 작업을 말한다.
파이썬에서는 배열(리스트)을 정렬하는 방법이 이미 제공하고 있다.
(1) sorted()
- 내장 함수(built-in function)
- 정렬된 새로운 리스트를 얻어냄
>>> L = [3, 8, 2, 7, 6, 10, 9]
>>> L2 = sorted(L)
>>> L2
[2, 3, 6, 7, 8, 9, 10]
(2) sort()
- 리스트의 메서드
- 해당 리스트를 정렬함
>>> L = [3, 8, 2, 7, 6, 10, 9]
>>> L.sort()
>>> L
[2, 3, 6, 7, 8, 9, 10]
정렬(Sort)
문자열로 이루어진 리스트의 경우 정렬 순서는 사전 순서(알파벳 순서)를 따름.
만약 문자열 길이 순서로 정렬하려면?
–> 정렬에 이용하는 키(key)
를 지정
>>> L = ['abcd', 'xyz', 'span']
>>> sorted(L, key=lambda x: len(x))
['xyz', 'abcd', 'span']
>>> L = [{'name':'John', 'score':83},
{'name':'Paul','score':92}]
# 점수가 높은 순으로 정렬
>>> L.sort(lambda x: x['score'], reverse=True)
탐색(Search)
탐색 알고리즘(1) - 선형 탐색(Linear Search)
-
리스트의 길이에 비례하는 시간 소요 -> O(n)
-
최악의 경우 : 모든 원소를 다 비교해보아야함.
탐색 알고리즘(2) - 이진 탐색(Binary Search)
-
탐색하려는 리스트가 이미 정렬되어 있는 경우에만 적용 가능
-
크기 순으로 정렬되어 있다는 성질 이용
예) 아래 리스트에서 30을 찾으시오
[1, 3, 7, 8, 12, 15, 17, 21, 24, 30, 32, 34, 39, 45, 51, 62]
def solution(L, x):
low = 0
high = len(L)-1
while low <= high:
mid = (low+high)//2
if L[mid] == x:
return mid
if L[mid] > x:
high = mid -1
else:
low = mid +1
return -1
한 번 비교가 일어날 때마다 리스트를 반씩 줄임 => divide & conquer -> O(log n)
Comments