반응형
정의
오름차순으로 정렬하는 기초적인 알고리즘 중 하나
기법
무차별 대입 Brute Force
알고리즘 순서
- 첫번쨰부터 마지막 까지 순회한다
- 순회하는 수와 왼쪽에 있는 수를 비교한다.
- 만약에 왼쪽의 수가 오른쪽 보다 크다면 작은수를 왼쪽 큰수를 오른쪽에 넣는다
- 앞에서 비교되었으니 왼쪽을 한번더 비교 하여 작은수를 왼쪽 큰수를 오른쪽에 넣는다
- 왼쪽의 수가 오른쪽 보다 크지 않다면 더이상 비교할 필요가 없다
- 마지막 까지 반복한다.
자바 코드
public static int[] insertSort(int[] input) {
for (int i = 1; i < input.length; ++i) {
int chkPos = i;
while (chkPos > 0) {
if (input[chkPos - 1] > input[chkPos]) {
int temp = input[chkPos];
input[chkPos] = input[chkPos - 1];
input[chkPos - 1] = temp;
}
--chkPos;
}
}
return input;
}
평균 시간 복잡도 Avg. time complexity
$O(n^2)$
최악 시간 복잡도 Worst time complexity
$O(n^2)$
공간 복잡도 space complexity
$O(1)$
안정성 stability
yes
계산법
순회 횟수
$n$
가장 많이 방문한 요소 수
$n$ (첫번째 요소)
가장 적게 방문한 요소 수
$1$ (마지막 요소)
평균적으로 방문한 요소 수
(가장 많이 방문한 요소 수+가장 적게 방문한 요소)/2 $= \frac{(n+1)}{2}$
다항식 시간
순회 횟수*평균적으로 방문한 요소 수 $=n\cdot \frac{n+1}{2}=(\frac{n^2}{2}+\frac{n}{2})$
시간 복잡도
$O(다항식 시간)=O((\frac{n^2}{2}+\frac{n}{2}))=O(n^2)$
반응형
'old > Programming' 카테고리의 다른 글
인텔리제이intellij에 라이브러리library(jar 파일) 추가하기 (0) | 2021.09.22 |
---|---|
퀵정렬 Quick Sort (0) | 2021.09.22 |
파이썬의 자료구조-리스트 List (0) | 2021.09.16 |
선택정렬 Selection Sort (0) | 2021.09.11 |
버블정렬 Bubble Sort (0) | 2021.09.10 |