일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 정렬
- JsonNode
- 쿼리메소드
- 클린코드
- @RequiredArgsConstructor
- CleanCode
- 코드
- WebClient
- 인터페이스
- 쿠키
- 계산 검색 방식
- 마크다운 테이블
- 빅 오 표기법
- 선형 리스트
- 내부 정렬
- 연결 리스트
- 배열
- @NoArgsConstructor
- 마크다운
- mysql
- code
- 트리
- java
- 클래스
- @ComponentScan
- 스택 큐 차이
- 리스트
- query
- 클린
- 자료구조
- Today
- Total
Developer Cafe
빅 오 표기법 4. 삽입 정렬 본문
기준 인덱스 다음 원소값을 임시 변수에 저장해 그 값을 왼쪽 원소들과 차례로 비교해 임시 변수의 값이 왼쪽 원소값보다 작다면 앞으로 시프트시키며 정렬한다.
패스스루1
인덱스 1의 값 2는 임시변수에 저장
4 | 2 | 7 | 1 | 3 |
앞의 원소값들과 비교 후 시프트한 후 저장
2 | 4 | 7 | 1 | 3 |
패스스루2
인덱스 2의 값 7은 임시변수에 저장
2 | 4 | 7 | 1 | 3 |
앞의 원소값들과 비교 후 시프트한 후 저장 (임시변수값이 더 크다 고로 그대로 저장)
2 | 4 | 7 | 1 | 3 |
패스스루3
인덱스 3의 값 1은 임시변수에 저장
2 | 4 | 7 | 1 | 3 |
앞의 원소값들과 비교 후 시프트한 후 저장
1 | 2 | 4 | 7 | 3 |
패스스루4
인덱스 4의 값 3은 임시변수에 저장
1 | 2 | 4 | 7 | 3 |
앞의 원소값들과 비교 후 시프트한 후 저장
1 | 2 | 3 | 4 | 7 |
삽입정렬은 버블정렬, 선택정렬과 달리 삭제(임시변수에저장), 비교, 시프트, 삽입 4개의 단계종류가 있다.
비교는 각 패스스루가 진행될때마다 1씩 증가한다. 1 + 2 + ... (N - 1) = 의 비교가 일어난다.
시프트도 마찬가지로 1 + 2 + ... (N - 1) = 의 시프트가 일어난다.
삭제와 삽입은 항상 패스스루당 1번만 일어나니 N - 1 = 의 삭제 삽입이 일어난다.
모든 단계를 더하면 N^2/2 + N^2/2 + N-1 + N-1 = N^2+2N 의 단계가 일어난다.
잠시 집고 넘어가겠다.
예를 들어 N^4 + N^3 + N^2 + N 단계가 있을때 빅 오 표기법에선 단순히 O(N^4) 라고만 표기한다.
그 이유는 가장 큰 차수가 끼치는 영향이 다음 큰 차수보다 훨씬 크기 때문이다.
N | N^2 | N^3 | N^4 |
2 | 4 | 8 | 16 |
5 | 25 | 125 | 625 |
10 | 100 | 1000 | 10000 |
100 | 10000 | 1000000 | 1000000000 |
1000 | 1000000 | 1000000000 | 1000000000000 |
다시 돌아와서 결국 N^2+2N 은 N^2단계 이다. 결론적으론 버블, 선택, 삽입정렬 모두 N^2단계 이다.
하지만 지금까진 최악의 시나리오만을 대상으로 했을때에는 선택정렬이 가장 효율적이고 버블, 삽입정렬은 덜 효율적인걸 알수있다. 그러나 평균적인 시나리오를 가장했을때는 결과가 달라진다.
삽입정렬은 최악의 시나리오일땐 O(n^2)이지만 평균일땐 O(n^2/2)이고 최선일땐 O(n)이 된다.
반면 선택정렬은 최악이나 최선이나 항상 O(n^2/2) 이다. 즉, 경우에 따라 삽입과 선택정렬을 써야된다.
function intersection(first_array, second_array) {
var result = [];
for(var i = 0 ; i < first_array.length ; i++) {
for(var j = 0 ; j < second_array.length ; j++) {
if(first_array[i] == second_array[j]) {
result.push(first_array[i]);
break;
}
}
}
}
'자료 구조 > 누구나 자료 구조와 알고리즘' 카테고리의 다른 글
스택 vs 큐 차이 (0) | 2021.03.06 |
---|---|
해시 테이블의 컴퓨팅 사고 (0) | 2021.03.06 |
빅 오 표기법 3. 선택 정렬 (0) | 2021.03.05 |
빅 오 표기법 2. 버블 정렬 (0) | 2021.03.05 |
빅 오 표기법 1 (0) | 2021.03.04 |