감자튀김 공장🍟

[C++] 삽입 정렬(Insertion Sort) 본문

Algorithm/정렬

[C++] 삽입 정렬(Insertion Sort)

Potato potage 2021. 8. 24. 20:55
반응형

삽입 정렬

  • 정렬되어 있는 리스트에 새로운 레코드를 적절한 위치에 삽입하는 과정을 반복한다.
  • 정렬되어 있지 않은 부분의 첫 번째 숫자가 정렬된 부분의 어느 위치에 삽입되어야 하는가를 판단한 후 해당 위치에 이 숫자를 삽입한다.

 

삽입 정렬의 과정

삽입 정렬의 과정

카드 게임을 할 때, 새로운 카드가 들어오면 새로운 카드를 기존의 카드 사이의 올바른 자리를 찾아 삽입 하는데 그 경우와 똑같다고 생각하면 된다.

 

구현 코드

#include <iostream>

using namespace std;

void insertionSort(int arr[], int len) {
	int i, j, temp;

	for (i = 1; i < len; i++) {
		temp = arr[i];
		for (j = i - 1; j >= 0; j--) {
			if (arr[j] < temp)
				break;
			arr[j + 1] = arr[j];
		}
		arr[j + 1] = temp;
	}
}

int main() {
	int arr[6] = { 5,3,8,1,2,7 };
	
	cout << "정렬 전: ";
	for (int x : arr)
		cout << x << " ";
	cout << endl;

	insertionSort(arr, sizeof(arr) / sizeof(int));
	
	cout << "정렬 후: ";
	for (int x : arr)
		cout << x << " ";
}

 

 

 

시간 복잡도

  • 삽입 정렬의 외부 루프는 n-1번 실행되고 각 단계에서 1번의 비교와 2번의 이동만 이루어지므로총 비교 횟수는 n-1번, 총 이동 횟수는 2(n-1)번이 되어 알고리즘의 시간 복잡도는 O(n)이다.
  • 총 비교 횟수
    • 각 단계에서 앞에 놓인 자료들은 전부 한 칸씩 뒤로 이동해야한다.
    • 외부 루프 안의 각 반복마다 i번의 비교가 수행된다.

    • 총 비교 횟수
  • 총 이동 횟수
    • 외부 루프의 각 단계마다 i+2번의 이동이 이루어진다.

    • 총 이동 횟수

시간 복잡도

반응형

'Algorithm > 정렬' 카테고리의 다른 글

[python] 버블 정렬(Bubble sort)  (0) 2022.03.19
[C++] 쉘 정렬 (Shell Sort)  (0) 2021.08.27
[C++] 버블 정렬(Bubble Sort)  (0) 2021.08.27
[C++] 선택 정렬(Selection Sort)  (0) 2021.08.23
[C++] 힙 & 힙 정렬(Heap & Heap Sort)  (0) 2021.08.22
Comments