2d3k / CS-Study

기본을 소홀히 하지 말자!!
0 stars 1 forks source link

[알고리즘] 삽입정렬 #11

Open 2d3k opened 1 year ago

2d3k commented 1 year ago

1. 구현방식은 무엇인가요?

2. 시간복잡도, 공간복잡도를 설명하시오.

3. 장단점을 설명하시오.

2d3k commented 1 year ago

1 삽입정렬(Insertion Sort)은 배열의 요소를 하나씩 삽입하면서 정렬을 수행하는 알고리즘입니다.

삽입정렬의 동작 방식은 다음과 같습니다.

정렬되지 않은 부분 배열 중 가장 왼쪽 요소를 선택합니다. 선택한 요소를 정렬된 부분 배열에서 적절한 위치에 삽입합니다. 이를 위해 선택한 요소와 비교하며, 삽입 위치를 찾습니다. 선택한 요소가 삽입된 위치를 기준으로, 왼쪽의 모든 요소를 한 칸씩 오른쪽으로 이동합니다. 정렬되지 않은 부분 배열에서 요소를 선택하는 과정으로 되돌아갑니다. 모든 요소가 정렬될 때까지 이를 반복합니다.

2d3k commented 1 year ago

2 삽입정렬의 시간 복잡도는 입력 데이터의 크기에 비례하여 계산할 수 있습니다.

최선의 경우: 입력 데이터가 이미 정렬되어 있을 때, 비교 횟수는 n-1번이며, 이동 횟수는 0번입니다. 따라서 시간 복잡도는 O(n)입니다. 평균 및 최악의 경우: 입력 데이터가 정렬되어 있지 않을 때, 모든 요소를 비교하며 삽입하는 경우 최대 n-1번의 비교와 이동이 발생하게 됩니다. 이 경우 시간 복잡도는 O(n^2)입니다. 삽입정렬의 공간 복잡도는 입력 데이터 외에 추가적인 공간이 필요하지 않으므로, O(1)입니다. 이는 입력 데이터를 정렬하는 과정에서도 추가적인 메모리를 사용하지 않는다는 것을 의미합니다.

2d3k commented 1 year ago

3 장점:

구현이 쉽고 이해하기 쉽습니다. 입력 데이터의 크기가 작을 때 성능이 좋습니다. 데이터가 이미 거의 정렬된 상태일 경우, 최선의 경우 시간 복잡도가 O(n)으로 매우 빠릅니다. 단점:

입력 데이터의 크기가 커질수록 다른 알고리즘들에 비해 성능이 떨어집니다. 데이터가 역순으로 정렬되어 있을 때, 최악의 경우 시간 복잡도가 O(n^2)으로 매우 느립니다. 안정적인 정렬 알고리즘이 아니며, 값이 같은 요소의 순서가 변경될 수 있습니다. 따라서 삽입정렬은 입력 데이터의 크기가 작고 거의 정렬된 상태일 경우에 유리하며, 구현이 쉽다는 장점이 있지만, 입력 데이터의 크기가 커지거나 역순으로 정렬되어 있을 경우 성능이 떨어지고 안정적이지 않은 단점이 있습니다.