
오늘은 다양한 정렬의 방법 중에서 상대적으로 다른 방법들에 비해 비효율적이지만 단순하고 쉬운 방법인 삽입 정렬, 버블 정렬, 선택 정렬에 대해 알아보겠습니다.
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)의 복잡도를 갖고 있습니다.