정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다.
number 타입을 요소로 갖는 배열
arr[i]는 정수
arr.length는 1,000 이하
number 타입을 요소로 갖는 배열을 리턴해야 합니다.
배열의 요소는 오름차순으로 정렬되어야 합니다.
arr[i] <= arr[j] (i < j)
삽입 정렬을 구현해야 합니다.
arr.sort 사용은 금지됩니다.
입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다.
let output = insertionSort([3, 1, 21]);
console.log(output); // --> [1, 3, 21]
const insertionSort = function (arr, callback = (el) => el) {
// TODO: 여기에 코드를 작성합니다.
let result = [arr[0]]; // 값을 비교하기 위해 초기 배열 생성해준다. [3]
for (let i = 1; i < arr.length; i++) {
// 만약 arr의 오른쪽값이 왼쪽값보다 클 경우에는 바로 푸시해준다.
if (callback(arr[i]) > callback(result[i - 1])) {
result.push(arr[i]);
} else {
// 만약 아닐경우에는
for (let j = 0; j < result.length; j++) {
if (callback(arr[i]) <= callback(result[j])) {
// let left = result.slice(0, j);
// let right = result.slice(j);
// result = left.concat(arr[i], right);
result.splice(j, 0, arr[i]);
// result 배열의 어떠한 값보다 arr[i]가 작을 때 그 사이에 값을 넣어준다!
break; // 해결 되었으니 break 걸어줘야 한다.
}
}
}
}
return result;
};
삽입 정렬은 자신의 위치를 찾아서 삽입하여 정렬을 완성하는 알고리즘이다.
시간복잡도
최악의 경우에는 O(n^2)를 가진다.
하지만 정렬이 모두 되어 있을 경우에는 한번씩만 비교하기 때문에 O(n)이다.