삽입정렬은 우리가 카드를 정렬하듯 작동하는 간단한 정렬 알고리즘입니다.
8 7 1 2 9 6, 시작
7 8 1 2 9 6, 7은 8보다 앞에 오므로 그 앞에 삽입
1 7 8 2 9 6, 1은 8보다, 7보다 앞에 오므로 그 앞에 삽입
1 2 7 8 9 6, 2는 8보다, 7보다 앞에 오므로 그 앞에 삽입
1 2 7 8 9 6, 9는 8보다 크므로 그대로
1 2 7 6 8 9, 6은 9보다 8보다 작으므로 그 앞에 삽입
#include <bits/stdc++.h>
using namespace std;
void insertionSort(int arr[], int n)
{
for(int i=1; i<n; i++){
int key = arr[i];
int j=i-1;
//key가 들어갈 자리를 찾는다
while(j>=0 && arr[j] > key){
arr[j+1] = arr[j];
j--;
}
//그 자리에 삽입한다.
arr[j+1]=key;
}
}
void printArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
int arr[] = { 12, 11, 13, 5, 6 };
int n = sizeof(arr) / sizeof(int);
insertionSort(arr, n);
printArray(arr, n);
return 0;
}
시간복잡도: O(n^2)
제자리정렬이며 안정정렬이다.
"정렬할 원소가 들어갈 자리를 찾아 삽입한다. 1번 인덱스 원소부터 마지막 인덱스 원소까지 실시한다."
'알고리즘 > 지식' 카테고리의 다른 글
[정렬 알고리즘] 퀵 정렬 (0) | 2020.03.04 |
---|---|
[정렬 알고리즘] 합병 정렬 (0) | 2020.03.03 |
[정렬 알고리즘] 버블 정렬 (0) | 2020.03.03 |
[정렬 알고리즘] 선택 정렬 (0) | 2020.03.02 |
[기본] 정렬 알고리즘 (0) | 2020.03.02 |