Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Amortized Analysis
- DiscriminatorValue
- ROLLBACK
- Spring
- 페치조인
- commit
- 즉시로딩
- MappedSuperclass
- JPA
- Embeddable
- 값타입
- 플러시
- DiscriminatorColumn
- 영속성 컨텍스트
- 영속성전이
- n+1문제
- 고아객체
- 엔티티 매핑
- relational DB
- Algorithm
- Spring Data JPA
- relational database
- 정렬
- DB
- fetch join
- 순수jpa
- Flush
- 지연로딩
- 관계형 데이터베이스
- 분할상환분석
Archives
- Today
- Total
Jun's note
[Algorithm] Insertion Sort (삽입정렬) C++ 본문
728x90
1. 삽입정렬 정의
자신보다 앞의 원소가 큰지 작은지 비교하여 자신의 위치를 찾아서 삽입하는 정렬 알고리즘이다.
- 왼쪽에는 이미 정렬된 부분, 오른쪽에는 정렬해야하는 부분으로 나눈 후 정렬한다.
- 두 번째 원소부터 시작하여 왼쪽에 있는 이미 정렬된 부분이랑 비교하여 삽입할 위치를 지정한 후, 삽입할 위치 뒤에 있는 원소들을 뒤로 옮겨 해당 위치에 원소를 삽입하는 알고리즘이다.
2. 삽입정렬 특징
- 정렬하고자 하는 개수 크기가 작을수록 좋은 알고리즘
- 이미 정렬되어있는 경우 빠름 (역순의 경우 최악의 알고리즘)
3. 시간 복잡도
- Best Case
- 이미 정렬이 되어있는 경우 : O(n)
- 비교횟수 : n-1 번 (n: 원소개수)
- Worst Case
- 정렬이 하나도 안되어있는 경우, 즉 역순일 경우 : O(n^2)
- 비교횟수 : 1 + 2 + ... + (n-2) + (n-1) = n(n-1)/2 = O(n^2)
4. 구현 방법 (C++)
int temp;
for (int i = 1; i < n; i++){
temp = arr[i];
for (int j = i - 1 ; j >= 0 && temp < arr[j]; j--){
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
'Computer Science > Algorithm' 카테고리의 다른 글
[Algorithm] 기수정렬 (Radix Sort) C++ (0) | 2022.01.06 |
---|---|
[Algorithm] 합병정렬 (Merge Sort) C++ (0) | 2022.01.04 |
[Algorithm] Quick Sort (퀵정렬) C++ (0) | 2022.01.03 |
Amortized Analysis (분할상환분석) (0) | 2021.12.31 |
Comments