삽입 정렬
왼쪽에 정렬된 부분을 만들고 값을 하나씩 더해 갑니다. 새 값을 꺼내서 더 작은 값을 만날 때까지 왼쪽으로 옮깁니다.
- 최선 Ω(n)
- 평균 Θ(n²)
- 최악 O(n²)
- 메모리 O(1)
- 안정
- 추가 메모리 없음
용어 설명
- 최선: 이 알고리즘에 가장 쉬운 입력일 때, 리스트 크기 n에 따라 시간이 늘어나는 정도.
- 평균: n에 따라 시간이 늘어나는 보통의 정도. n²이면 값의 개수가 두 배일 때 시간은 약 네 배이고, n log n은 훨씬 천천히 늘어납니다.
- 최악: 가장 어려운 입력에서 늘어나는 정도. 속도가 절대 떨어지면 안 될 때 중요합니다.
- 메모리: 리스트 외에 필요한 추가 메모리 양. 1은 변수 몇 개, n은 리스트 복사본 하나를 뜻합니다.
- 안정: 같은 값 두 개가 원래 순서를 유지합니다. 레코드의 한 필드로 정렬할 때 중요합니다.
- 추가 메모리 없음: 두 번째 리스트 없이 리스트 안에서 바로 정렬합니다.
- 비교 중
- 이동 중
- 꺼낸 값
- 정렬된 부분
- 제자리
비교 횟수 이동 횟수
재생을 누르면 정렬이 진행되며 비용이 늘어나는 모습이 선으로 보입니다
재생을 누르거나 한 단계씩 진행하세요.
스페이스바: 재생 또는 일시정지. 좌우 화살표 키: 단계 이동. Home과 End 키: 처음과 끝으로 이동.
해 보세요: 거의 정렬된 리스트를 골라 보세요. 옮길 값이 거의 없어서 아주 적은 단계로 끝납니다.
작동 방식
왼쪽 부분은 언제나 정렬되어 있습니다. 다음 값을 꺼내고, 정렬된 부분에서 그보다 큰 값을 모두 한 자리씩 오른쪽으로 옮깁니다. 그리고 빈자리에 그 값을 넣습니다. 많은 사람이 손에 든 카드를 정리할 때 쓰는 방법입니다.
언제 쓰면 좋을까
짧은 리스트나 거의 정렬된 리스트에 잘 맞고, 이런 경우 아주 빠릅니다. 실제 정렬 라이브러리도 더 빠른 방법 안에서 리스트의 작은 조각을 정렬할 때 이 방법을 씁니다.