강의: 구름에듀 "안경잡이개발자가 알려주는 실전 알고리즘 강좌"
링크: 안경잡이개발자가 알려주는 실전 알고리즘 강좌
(강의는 알고리즘 풀이를 C/C++ 언어로 진행합니다.)
대체로 알고리즘을 공부할 때 가장 먼저 나오는 개념이 정렬 알고리즘인 이유는 효율성의 차이를 가장 극명하게 보여주기 때문
각 숫자를 적절한 위치에 삽입하는 방법
선택 정렬과 버블 정렬은 무조건 위치를 바꾸는 방식이었다면, 삽입 정렬은 '필요할 때'만 위치를 바꾸게 됨
인덱스가 1인 요소를 curValue에 할당한다.
인덱스가 0인 요소가 curValue보다 크면 인덱스가 0인 요소에 curValue를 할당하고, 하나씩 뒤로 땡긴다.
(인덱스가 0인 요소가 curValue보다 작을 경우 아무일도 벌어지지 않음)
인덱스가 2인 요소를 curValue에 할당한다.
인덱스가 1, 2인 요소가 curValue보다 크면 인덱스가 0인 요소에 curValue를 할당하고, 하나씩 뒤로 땡긴다.
(인덱스가 0인 요소가 curValue보다 작을 경우 아무일도 벌어지지 않음)
반복..
function solution (arr) {
for (let i = 1; i < arr.length; i++) {
let curValue = arr[i];
let j;
for (j = i - 1; j > 0 && arr[j] > curValue; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = curValue;
}
return arr;
}
console.log(solution(arr1));
BigO
- Worst Case(정렬이 하나도 안되어있는 경우): O(N^2)
- Best Case(이미 정렬이 되어있는 경우): O(N)