삽입 정렬(Insertion Sort) - fora22/CodingTest GitHub Wiki

삽입 정렬은 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입하는 정렬 알고리즘이다.

image

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)의 시간 복잡도를 가진다.

Reference

⚠️ **GitHub.com Fallback** ⚠️