Computer Science/Algorithm
[Algorithm] Insertion Sort (삽입정렬) C++
junning
2022. 1. 2. 23:23
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;
}