자바스크립트 공부에 용이하도록 기본적인 정렬 알고리즘을 모아봤다.
버블 정렬
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
삽입 정렬
function insertionSort(arr) {
let len = arr.length;
for (let i = 1; i < len; i++) {
let key = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
return arr;
}
선택 정렬
function selectionSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
let min = i;
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (i !== min) {
let temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
return arr;
}
퀵 정렬
function quickSort(arr, left = 0, right = arr.length - 1) {
if (left < right) {
let pivotIndex = partition(arr, left, right);
quickSort(arr, left, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, right);
}
return arr;
}
function partition(arr, left, right) {
let pivot = arr[right];
let pivotIndex = left;
for (let i = left; i < right; i++) {
if (arr[i] < pivot) {
let temp = arr[i];
arr[i] = arr[pivotIndex];
arr[pivotIndex] = temp;
pivotIndex++;
}
}
let temp = arr[right];
arr[right] = arr[pivotIndex];
arr[pivotIndex] = temp;
return pivotIndex;
}
합병정렬
function mergeSort(arr) {
if (arr.length <= 1) {
return arr;
}
const mid = Math.floor(arr.length / 2);
const leftArr = arr.slice(0, mid);
const rightArr = arr.slice(mid);
const sortedLeftArr = mergeSort(leftArr);
const sortedRightArr = mergeSort(rightArr);
return merge(sortedLeftArr, sortedRightArr);
}
function merge(leftArr, rightArr) {
const resultArr = [];
let leftIndex = 0;
let rightIndex = 0;
while (leftIndex < leftArr.length && rightIndex < rightArr.length) {
if (leftArr[leftIndex] < rightArr[rightIndex]) {
resultArr.push(leftArr[leftIndex]);
leftIndex++;
} else {
resultArr.push(rightArr[rightIndex]);
rightIndex++;
}
}
return resultArr.concat(leftArr.slice(leftIndex)).concat(rightArr.slice(rightIndex));
}
위 코드는 mergeSort 함수와 merge 함수로 이루어져 있습니다. mergeSort 함수는 배열을 반씩 나누어 재귀적으로 호출하며, 배열의 길이가 1 이하가 될 때까지 반복합니다. 그리고 마지막으로 merge 함수를 호출하여 왼쪽 배열과 오른쪽 배열을 병합합니다.
merge 함수는 왼쪽 배열과 오른쪽 배열을 인수로 받아 두 배열을 병합합니다. 병합하는 과정에서 왼쪽 배열의 첫번째 요소와 오른쪽 배열의 첫번째 요소를 비교하여 작은 값을 결과 배열에 추가하고, 해당 배열의 인덱스를 증가시킵니다. 그리고 왼쪽 배열이나 오른쪽 배열 중 하나가 모두 결과 배열에 추가될 때까지 위 과정을 반복합니다. 마지막으로 왼쪽 배열과 오른쪽 배열 중 하나가 이미 모두 결과 배열에 추가되었다면, 남은 요소들을 결과 배열 뒤에 추가하여 정렬을 완료합니다.
위 코드를 실행하면 주어진 배열이 합병 정렬을 통해 정렬된 결과를 반환합니다.
let, const, var 차이점
let, const, var는 모두 변수를 선언하기 위한 키워드입니다. 하지만 선언 방식과 변수의 특징이 각각 다르기 때문에 이들을 혼동하면 문제가 발생할 수 있습니다.
var
let
const