[java] 삽입 정렬 알고리즘
삽입 정렬은 간단하지만 유용한 정렬 알고리즘입니다. 이 알고리즘은 두 부분으로 나눠지며, 하나는 정렬된 요소들이고 다른 하나는 정렬되지 않은 요소들입니다. 정렬되지 않은 부분의 요소를 하나씩 골라 정렬된 부분의 올바른 위치에 삽입하여 정렬하는 방식으로 동작합니다.
알고리즘 동작 방식
- 첫 번째 요소를 정렬된 부분으로 취급합니다.
- 정렬되지 않은 부분의 다음 요소를 정렬된 부분에 올바른 위치에 삽입할 때까지 반복합니다.
- 모든 요소가 정렬될 때까지 2번을 반복합니다.
예시 코드
public void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
위의 코드는 Java로 삽입 정렬을 구현한 예시입니다.
시간 복잡도
삽입 정렬의 평균 및 최악의 시간 복잡도는 O(n^2)입니다. 최선의 경우에는 이미 정렬된 배열에 대해서 O(n)의 시간 복잡도를 갖습니다.
마치며
삽입 정렬은 구현이 간단하고 작은 배열에 대해서는 효율적인 정렬 알고리즘입니다. 그러나 큰 배열에 대해서는 다른 고급 정렬 알고리즘보다 성능이 떨어지므로 주의해야 합니다.
참고 문헌: GeeksforGeeks - Insertion Sort