1. 삽입정렬(insertion sort) 란?
- 각 단계 마다 하나의 원소를 그 앞의 원소들과 비교를 해서 자신의 자리를 찾아 가는 것이다.
- 첫 번째 원소는 처음에는 혼자이므로 그 자체로 정렬된 상태이고 두번째 원소부터 비교를 하며 정렬을 한다
- 첫번째 와 두번째 원소를 비교를 제대로 했다면 3번째 원소를 정렬 할때는 3번째 원소 앞쪽은 정렬이 되어있는 상태일 것 이다.
- 그럼 세번째 원소가 이제 자신의 자리를 찾으러 갈 것이고 네번째 원소가 비교를 시작하려 할 때는 앞의 3개의 원소는 정렬된 상태
- 그리고 비교를 해가면서 원소의 자리가 바뀔 수 있기 때문에 자신의 차례때 배정받은 위치가 최종출력의 위치는 아니다.
2. 최악의 경우 (worst case)
- 키 오름차순 정렬을 하고 싶다고 가정했을 때, 계속 키가 제일 작은 사람이 차례대로 들어오는 것이다.
( 즉, 입력이 역순으로 정렬되어 있을 때) --> Θ(n^2)
3. 평균의 경우 (Average Analysis)
- 각 자리에 들어갈 확률은 모두 같다고 가정 (1/i+1) -->>내가 원소로 들어갔을 때 그자리도 포함 i+1
- step i에서 평균 i/2의 연산
- 평균 분석의 경우 대략 n^2/4 정도 이다.
4.특징
- input의 크기가 적을 때에 한정해서 매우 빠르다고 알려져있다.
- 한번에 잘못된 위치를 하나만 수정할 수 있는 제한적인 조건 내에서는 최적의 알고리즘 이다.
5. 구현 (key값을 그냥 입력받은 int의 수라고 가정하고 , 그냥 vector<int>의 각 index에 해당하는 값을 통한 정렬을 구현)
'알고리즘 > 정렬 (sorting)' 카테고리의 다른 글
5. Radix sort (기수 정렬) (0) | 2020.04.19 |
---|---|
4. Heap sort (힙 정렬)--(2) (0) | 2020.04.16 |
4. Heap sort (힙 정렬)--(1) (0) | 2020.04.16 |
3. Merge Sort (합병정렬) -구현 (0) | 2020.04.15 |
2. Quick sort(퀵 소트) -구현 (0) | 2020.04.14 |