자료구조
자료구조 - 삽입 정렬
tita
2024. 6. 11. 13:37
[삽입 정렬(Insertion Sort)]
삽입 정렬(Insertion Sort)은 정렬 알고리즘 중 하나로, 리스트의 요소를 하나씩 비교하여 정렬된 부분에 적절한 위치에 삽입하는 방식입니다. 삽입 정렬은 단순하면서도 효율적인 알고리즘으로, 작은 데이터 집합이나 거의 정렬된 데이터에 대해 성능이 우수합니다.
시간 복잡도는 최악의 경우 O(n^2)입니다.
삽입 정렬 과정 설명
- 리스트의 두 번째 요소부터 시작하여, 현재 요소를 정렬된 부분과 비교하여 적절한 위치에 삽입합니다.
- 이 과정을 리스트의 마지막 요소까지 반복합니다.
삽입 정렬 의사 코드
함수 insertionSort(arr):
n = 배열의 길이(arr)
for i = 1부터 n-1까지:
key = arr[i]
j = i - 1
while j >= 0 그리고 arr[j] > key:
arr[j + 1] = arr[j]
j = j - 1
arr[j + 1] = key
반환 arr
삽입 정렬 예제
삽입 정렬의 과정 설명
예시 리스트: [64, 25, 12, 22, 11]
첫 번째 반복:
두 번째 요소(25)를 선택하여 정렬된 부분([64])과 비교.
25는 64보다 작으므로 64 앞에 삽입.
결과: [25, 64, 12, 22, 11]
두 번째 반복:
세 번째 요소(12)를 선택하여 정렬된 부분([25, 64])과 비교.
12는 25보다 작으므로 25 앞에 삽입.
결과: [12, 25, 64, 22, 11]
세 번째 반복:
네 번째 요소(22)를 선택하여 정렬된 부분([12, 25, 64])과 비교.
22는 25보다 작으므로 25 앞에 삽입.
결과: [12, 22, 25, 64, 11]
네 번째 반복:
다섯 번째 요소(11)를 선택하여 정렬된 부분([12, 22, 25, 64])과 비교.
11은 12보다 작으므로 12 앞에 삽입.
결과: [11, 12, 22, 25, 64]
삽입 정렬 코드
#include <iostream>
#include <vector>
using namespace std;
// 삽입 정렬 함수
void insertionSort(vector<int>& arr)
{
int n = arr.size(); // 배열의 길이
for (int i = 1; i < n; i++)
{
int key = arr[i]; // 현재 요소를 key로 설정
int j = i - 1;
// key보다 큰 요소들을 한 칸씩 뒤로 이동
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key; // key를 올바른 위치에 삽입
}
}
int main()
{
vector<int> arr = {64, 25, 12, 22, 11}; // 예제 리스트
cout << "정렬 전: ";
for (int i : arr)
{
cout << i << " ";
}
cout << endl;
insertionSort(arr); // 삽입 정렬 수행
cout << "정렬 후: ";
for (int i : arr)
{
cout << i << " ";
}
cout << endl;
return 0;
}