정렬 중간 과정에 데이터가 왼쪽 데이터와 오른쪽 데이터로 나뉘어 진다.
왼쪽 데이터는 정렬이 된 데이터가 있고 오른쪽 데이터는 정렬이 되지 않은 데이터가 있다.
오른쪽 데이터는 제일 앞 숫자를 왼쪽에 정렬된 데이터의 제 위치에 삽입한다.
삽입하는 과정에서 삽입될 위치와 원레 위치 중간의 모든 데이터는 오른쪽으로 한 칸씩 이동한다.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
void swap(int& i, int& j) {
int k;
k = i;
i = j;
j = k;
}
void InsertionSort(vector<int>& A) {
int n = A.size();
for (int i = 1; i < n; i++) {
for (int j = i; j > 0 && A[j - 1] > A[j]; j--) {
swap(A[j-1], A[j]);
}
}
}
void print(vector<int> A) {
for (auto el : A) {
cout << el << " ";
}
cout << endl;
}
void main() {
vector<int> A = { 9,6,3,1,2,4,5,7,8 };
print(A);
InsertionSort(A);
print(A);
}