Search
Duplicate

정렬 알고리즘

태그
정렬
정렬 알고리즘
정렬 알고리즘
평균 시간 복잡도
공간 복잡도
특징
선택 정렬
O(N2)O(N^2)
O(N)O(N)
아이디어가 매우 간단하다.
삽입 정렬
O(N2)O(N^2)
O(N)O(N)
데이터가 거의 정렬되어 있을 때는 가장 빠르다.
퀵 정렬
O(NlogN)O(NlogN)
O(N)O(N)
대부분의 경우에 가장 적합하며, 충분히 빠르다.
계수 정렬
O(N+K)O(N + K)
O(N+K)O(N + K)
데이터의 크기가 한정되어 있는 경우에만 사용이 가능하지만, 매우 빠르게 동작한다.
선택정렬
가장 작은 데이터를 선택해서 정렬되지 않은 데이터 중에서 가장 앞쪽에 있는 데이터와 위치를 바꾸는 방법이다.
삽입정렬
데이터를 앞에서부터 하나씩 확인하며 데이터를 적절한 위치에 삽입하는 방법이다.
필요할 때만 위치를 바꾸므로 ‘데이터가 거의 정렬 되어 있을 때’ 효과적이다.
퀵 정렬
기준 데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법이다.
기준을 설정한 다음 큰 수와 작은 수를 교환한 후, 리스트를 반으로 나누는 방식으로 동작한다.
호어 분할 방식
피벗 : 큰 숫자와 작은 숫자를 교환할 때, 교환하기 위한 기준
리스트에서 첫번째 데이터를 피벗으로 정한다.
데이터다 거의 정렬되어 있을 때는 느리게 동작한다.
계수 정렬
특정한 값을 가지는 데이터의 개수를 카운트하는 방법이다.
가장 큰 데이터와 가장 작은 데이터의 차이가 1000000 을 넘지 않을 때 효과적으로 사용할 수 있다. (모든 범위를 담을 수 있는 크기의 리스트를 선언해야 하기 때문)
파이썬의 정렬 라이브러리
sorted()
퀵 정렬과 동작 방식이 비슷한 병합 정렬을 기반으로 만들어졌다.
리스트, 딕셔너리 자료형 등을 입력받아서 정렬된 결과를 출력한다.
반환되는 결과는 리스트 자료형이다.
sort()
별도의 정렬된 리스트가 반환되는 것이 아니라 내부 원소가 바로 정렬된다.
key 매개변수
sorted()sort() 를 이용할 때에는 key 매개변수를 입력으로 받을 수 있다.
리스트의 데이터가 튜플로 구성되어 있으며, 각 데이터의 두번째 원소를 기준으로 설정하는 경우
array = [('바나나', 2), ('사과', 5), ('당근', 3)] def setting(data) : return data[1] result = sorted(array, key=setting) print(result) # output [('바나나', 2), ('당근', 3), ('사과', 5)]
Python
복사