알고리즘
삽입 정렬(Insertion Sort)
dev-rootable
2023. 10. 26. 13:10
이미 정렬된 데이터 범위에 정렬되지 않은 데이터를 적절한 위치에 삽입시켜 정렬하는 방식
시간 복잡도 : O(N^2)
선택 데이터를 현재 정렬된 데이터 범위 내에서 적절한 위치에 삽입하는 것
📌 정렬 과정
- 현재 index에 있는 데이터 값을 선택
- 현재 선택한 데이터가 정렬된 데이터 범위에서 삽입될 위치를 탐색
- 처음 자신보다 작은 값이 나올 때까지(오름차순)
- 처음 자신보다 큰 값이 나올 때까지(내림차순)
- 삽입 위치부터 index 위치까지 shift 연산(우측 이동)을 수행
- 삽입 위치에 현재 선택한 데이터를 삽입하고 index++연산을 수행
- 마지막 index까지, 즉 선택할 데이터가 없을 때까지 반복
📌 알고리즘
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int N = readInt();
int[] A = new int[N];
StringBuilder ans = new StringBuilder();
for (int i = 0; i < N; i++) {
A[i] = readInt();
}
for (int i = 1; i < N; i++) {
int insertion_point = i;
int insertion_value = A[i];
for (int j = i - 1; j >= 0; j--) {
if (A[j] < A[i]) {
insertion_point = j + 1;
break;
}
if (j == 0) insertion_point = 0;
}
for (int j = i; j > insertion_point; j--) {
A[j] = A[j - 1];
}
A[insertion_point] = insertion_value;
}
for (int i = 0; i < N; i++) {
ans.append(A[i]).append(" ");
}
System.out.println(ans);
}
static int readInt() throws IOException {
int c, n = System.in.read() & 15;
while ((c = System.in.read()) > 32) n = (n << 3) + (n << 1) + (c & 15);
return n;
}
}
Reference: