Notice
suyeonme
[Algorithm] 선택 정렬(Selection Sort), 삽입 정렬(Insertion Sort) 본문
1. 선택 정렬(Selection Sort)이란?
- 가장 작은 요소를 맨 앞으로 이동하고, 두번째 작은 요소는 맨 앞에서 두번째로 이동하는등의 작업을 반복하는 알고리즘이다.
- 시간 복잡도는 O(n^2)으로 효율이 좋지 않다. (버블 정렬 < 선택 정렬)
- 서로 떨어져있는 요소를 교환하므로 안정적이지 않다. 즉 중복된 요소가 존재할 경우, 정렬한 후 두 요소의 순서가 뒤바뀐다.
1.1 선택 정렬 구현
public void selectionSort(int[] arr, int n) {
for(int i = 0; i < n - 1; i++) {
int min = i; // 아직 정렬되지 않은 부분에서 가장 작은 요소의 인덱스
for(int j = i + 1; j < n; j++) {
if(arr[j] < arr[min]) {
min = j;
}
swap(arr, i min);
}
}
}
2. 삽입 정렬(Insertion Sort)
- 선택한 요소를 그보다 더 앞쪽의 알맞은 위치에 삽입하는 작업을 반복하여 정렬하는 알고리즘이다.
- 시간 복잡도는 O(n^2)으로 효율이 좋지 않다. (선택 정렬 < 삽입 정렬)
- 정렬은 두번째 요소부터 선택하여 진행한다.
- 서로 떨어져있는 요소들을 교환하는게 아니므로 안정적이다.
2.1 삽입 정렬 구현
public void insertionSort(int[] arr, int n) {
for(int i = 1; i < n; i++) {
int j;
int temp = arr[i];
for(j = i; j > 0 && arr[j - 1] > temp; j--) {
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}
'프로그래밍👩🏻💻 > 알고리즘' 카테고리의 다른 글
[Algorithm] 퀵 정렬(Quick Sort) (0) | 2022.06.21 |
---|---|
[Algorithm] 셸 정렬(Shell Sort) (0) | 2022.06.20 |
[Algorithm] 버블 정렬(Bubble Sort) (0) | 2022.06.19 |
[Algorithm] 재귀(Recursion)란? (0) | 2022.06.19 |
[Algorithm] 이진 검색(Binary Search) (0) | 2022.06.18 |
Comments