오늘은 다양한 정렬의 방법 중에서 상대적으로 다른 방법들에 비해 비효율적이지만 단순하고 쉬운 방법인 삽입 정렬, 버블 정렬, 선택 정렬에 대해 알아보겠습니다.
O(n)
으로 최선이고, 역순으로 정렬되어 있는 경우는 최악의 경우로 O(n^2)
입니다.function insertion_sort(arr) {
let answer = arr;
for (let i = 1; i < arr.length; i++) {
let key = arr[i];
let j;
for (j = i - 1; j >= 0 && arr[j] > key; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = key;
}
return answer;
}
i-1
에 해당하는 값부터 정렬하기 시작합니다.arr[j]
보다 작으면 arr[j+1]
에 arr[j]
의 값을 추가해주어 한칸씩 오른쪽으로 이동시킵니다.arr[j]
보다 작지 않은 경우가 발생하면 반복을 중단하고 기존에 저장되어있던 정렬 대상(key
)을 arr[j+1]
에 추가해줍니다.function bubble_sort(arr) {
let answer = arr;
for (let i = arr.length - 1; i > 0; i--) {
for (let j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return answer;
}
O(n^2)
입니다.function selection_sort(arr) {
let answer = arr;
for (let i = 0; i < arr.length - 1; i++) {
let l = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[l]) l = j;
}
[arr[i], arr[l]] = [arr[l], arr[i]];
}
return answer;
}
O(n^2)
의 복잡도를 갖고 있습니다.