[자료구조] 삽입 정렬 (insertion sort)CSE/자료구조 (data structure)2022. 11. 10. 00:00
Table of Contents
삽입 정렬이란?
정렬이 되어 있는 왼쪽 리스트와 정렬이 되어 있지 않은 오른쪽 리스트로 나누었다고 가정해봅시다.
배열의 첫 원소부터 차례대로 앞에 이미 정렬되어 있는 왼쪽 리스트와 비교하며 어느 자리에 들어갈 지 위치를 판단한 후, 적절한 위치에 삽입하는 정렬 방식입니다.
삽입 정렬 구현
삽입 정렬의 핵심 또한 왼쪽 리스트와 오른쪽 리스트를 분리하는 것입니다.
각자 아래 목적에 맞게 분리되어야 하므로 반복문을 통해 숫자가 담겨있는 배열이나 리스트에 제대로 접근해야 합니다.
- 왼쪽 리스트: 오름차순 (혹은 내림차순) 으로 정렬이 되어있는 상태여야 함.
- 오른쪽 리스트: 정렬 관계는 상관 없지만, 왼쪽 리스트에 어느 부분에 삽입되어야 할 지 정확히 계산해야 합니다.
코드로 구현하면 아래와 같습니다.
void insertion_sort(int list[], int n) {
int i, j, k;
for(i = 1; i < n; i++) {
key = list[i];
for(j = i - 1; j >= 0 && list[j] > key; j--) {
list[j + 1] = list[j];
}
list[j + 1] = key;
}
}
삽입 정렬의 시간 복잡도
삽입 정렬 또한 반복문이 이중으로 들어가있는 것을 볼 수 있기 때문에 $O(n^2)$입니다.
728x90
반응형
'CSE > 자료구조 (data structure)' 카테고리의 다른 글
[자료구조] 셸 정렬 (shell sort) (0) | 2022.11.12 |
---|---|
[자료구조] 버블 정렬 (bubble sort) (0) | 2022.11.11 |
[자료구조] 선택 정렬 (selection sort) (0) | 2022.11.09 |
[자료구조] 그래프 위상 정렬 알고리즘 (0) | 2022.11.08 |
[자료구조] 플로이드(Floyd)의 최단 경로 알고리즘 (0) | 2022.11.07 |
@junyeokk :: 나무보다 숲을
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!