삽입 정렬(Insertion Sort) - fora22/CodingTest GitHub Wiki
삽입 정렬은 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입하는 정렬 알고리즘이다.

C++ 구현 코드는 다음과 같다.
#include <iostream>
#include <random>
#include <vector>
using namespace std;
vector<int> getRandomArray(const int randomNumberCount)
{
int temp, x, y;
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<int> dis(0, randomNumberCount - 1);
vector<int> randomArray(randomNumberCount);
for (int i = 0; i < randomNumberCount; i++)
{
randomArray[i] = i + 1;
}
for (int i = 0; i < randomNumberCount; i++)
{
x = dis(gen);
y = dis(gen);
if (x != y)
{
temp = randomArray[x];
randomArray[x] = randomArray[y];
randomArray[y] = temp;
}
}
return randomArray;
}
int main(void)
{
const int randNumberLength = 100;
vector<int> randArray = getRandomArray(randNumberLength);
int temp;
for (int i = 1; i < randArray.size(); i++)
{
for (int j = i; j > 0; j--)
{
if (randArray[j] < randArray[j - 1])
{
temp = randArray[j];
randArray[j] = randArray[j - 1];
randArray[j - 1] = temp;
}
else
{
break;
}
}
}
for (int i = 0; i < randArray.size(); i++) {
cout << randArray[i] << " ";
}
return 0;
}- 시간 복잡도는 O(N^2)이며 반복문이 두번 중첩되어 사용된다.
- 현재 데이터가 거의 정렬되어 있다면 매우 빠르게 동작한다.
- 최선의 경우 O(N)의 시간 복잡도를 가진다.