- 문제
- 시도
- 처음에는 0번을 기준으로 잡고 크면 뒤에, 작으면 앞에 넣도록 풀이하였었음
- 마지막 문항의 시간복잡도를 해결하지 못하였음
- 삽입 정렬의 개념을 이해하려고 구글링을 하다가 다른 언어로 풀이한 내용을 읽음
- 그 내용을 바탕으로 문제를 풀이하였음
- 수도코드
const insertionSort = function (arr) {
let sorted = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (arr[i] >= sorted[i - 1]) {
sorted.push(arr[i]);
} else {
for (let j = 0; j < i; j++) {
if (arr[i] <= sorted[j]) {
const left = sorted.slice(0, j);
const right = sorted.slice(j);
sorted = left.concat(arr[i], right);
break;
}
}
}
}
return sorted;
};
- 레퍼런스
const insertionSort = function (arr, callback = (n) => n) {
let sorted = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (callback(arr[i]) >= callback(sorted[i - 1])) {
sorted.push(arr[i]);
}
else {
for (let j = 0; j < i; j++) {
if (callback(arr[i]) <= callback(sorted[j])) {
const front = sorted.slice(0, j)
const rear = sorted.slice(j)
sorted = front.concat(arr[i], rear)
break;
}
}
}
}
return sorted;
};