
선택 정렬/버블 정렬과 정반대로 착상한 정렬이다. 선택 정렬과 버블 정렬은 정렬되지 않은 배열의 크기를 n부터 하나씩 줄이는데 삽입 정렬은 정렬된 배열의 크기를 1에서 시작하여 하나씩 늘린다. 삽입 정렬의 핵심 작업은 이미 정렬된 i개짜리 배열에 하나의 원소를 더하여 정렬된 i+1 배열을 만드는 과정이다.
최악의 경우 시간복잡도가 가 드는 비효율적인 정렬 알고리즘이지만 배열이 정렬된 상태로 입력된다면 가장 매력적인 알고리즘이 된다.
삽입 정렬은 선택 정렬이나 버블 정렬보다는 빠르며, 10만개의 원소를 임의 생성해서 정렬해서 앞의 정렬들과 비교해보면 삽입 정렬은 선택 정렬보다 3배 빠르고, 버블 정렬보다는 14배 정도 빠르다.
const insertionSort = (list : number[]) => {
for(let i=1; i < list.length; i++){
let loc = i-1;
let newItem = list[i];
while(loc >= 0 && newItem < list[loc]){
list[loc+1] = list[loc];
loc--;
}
list[loc+1] = newItem;
}
console.log(list.join(`-`));
}
insertionSort([3,12,2,1,15,8]);
// 결과 : 1-2-3-8-12-15