sorted()
파이썬은 기본 정렬 라이브러리인 sorted() 함수를 제공한다.
sorted() 는 병합 정렬을 기반으로 만들어졌는데, 병합 정렬은 일반적으로 퀵 정렬보다 느리지만 최악의 경우에도 시간 복잡도 O(NlogN)을 보장한다는 특징이 있다. sorted() 함수는 정렬된 결과를 리스트 자료형으로 반환한다.
- 파이썬은 병합 정렬과 삽입 정렬의 아이디어를 더한 하이브리드 방식의 정렬 알고리즘을 사용하고 있다.
sort()
리스트 객체의 내장함수인 sort() 는 리스트 변수가 하나 있을 때 내부 원소를 바로 정렬한다.
이를 이용하면 별도의 정렬된 리스트가 반환되지 않고 내부 원소가 바로 정렬된다.
array = [ 7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
# sorted() 정렬 : 정렬된 리스트가 반환됨, array 는 그대로
result = sorted(array)
print(result)
print(array)
# sort() 정렬 : 내부 원소가 바로 정렬됨
array.sort()
print(array)
# sorted() 정렬 반환 결과를 담은 result 와 array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
# sort() 정렬된 array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
key 값
또한 sorted() 나 sort() 를 이용할 때에는 key 매개변수를 입력으로 받을 수 있다. key 값으로는 하나의 함수가 들어가야 하며 이는 정렬 기준이 된다.
array = [('바나나', 2), ('사과', 5), ('당근', 3)]
# 방법 1 : 함수를 정의한 후 key 값에 넣어주기
def setting(data):
return data[1] # 인덱스 1에 위치한 원소가 반환된다 (key 값 = 2, 5, 3)
result = sorted(array, key = setting)
print(result)
# 방법 2 : 람다함수를 key 값에 넣어주기
result = sorted(array, key = lambda data: data[1])
print(result)
[('바나나', 2), ('당근', 3), ('사과', 5)]
[('바나나', 2), ('당근', 3), ('사과', 5)]
정렬 라이브러리의 시간 복잡도
정렬 라이브러리는 항상 최악의 경우에도 시간 복잡도 O(NlogN)을 보장한다.