선택 정렬
남은 값 중 최솟값을 찾아 다음 자리로 교환합니다. 교환은 아주 적지만, 비교 횟수는 언제나 같습니다.
- Ω(n²)
- Θ(n²)
- O(n²)
- O(1)
- 아니요
- 예
최선: 이 알고리즘에 가장 쉬운 입력일 때, 리스트 크기 n에 따라 시간이 늘어나는 정도.
평균: n에 따라 시간이 늘어나는 보통의 정도. n²이면 값의 개수가 두 배일 때 시간은 약 네 배이고, n log n은 훨씬 천천히 늘어납니다.
최악: 가장 어려운 입력에서 늘어나는 정도. 속도가 절대 떨어지면 안 될 때 중요합니다.
메모리: 리스트 외에 필요한 추가 메모리 양. 1은 변수 몇 개, n은 리스트 복사본 하나를 뜻합니다.
안정: 같은 값 두 개가 원래 순서를 유지합니다. 레코드의 한 필드로 정렬할 때 중요합니다.
추가 메모리 없음: 두 번째 리스트 없이 리스트 안에서 바로 정렬합니다.
- 비교 중
- 이동 중
- 현재 최솟값
- 제자리
해 보세요: 역순 리스트를 골라 보세요. 비교 횟수는 다른 어떤 리스트와도 똑같습니다.
작동 방식
아직 정렬되지 않은 부분을 훑어 최솟값을 찾습니다. 그 값을 정렬되지 않은 부분의 첫 값과 교환하면, 값 하나가 더 제자리를 찾습니다. 리스트가 이미 정렬되어 있어도 남은 값을 매번 모두 확인합니다.
언제 쓰면 좋을까
데이터를 읽는 비용은 작고 옮기는 비용은 클 때 유용합니다. 자리마다 교환이 많아야 한 번이기 때문입니다. 그 밖의 경우에는 간단한 방법 중에서 삽입 정렬이 더 낫습니다.