js-dsa-utils
Version:
Basic DSA utilities (sorting, searching, stack, queue,linked list etc.)
67 lines (61 loc) • 1.48 kB
JavaScript
// Bubble Sort
function bubbleSort(arr) {
const res = [...arr];
for (let i = 0; i < res.length - 1; i++) {
for (let j = 0; j < res.length - i - 1; j++) {
if (res[j] > res[j + 1]) {
[res[j], res[j + 1]] = [res[j + 1], res[j]];
}
}
}
return res;
}
// Selection Sort
function selectionSort(arr) {
const res = [...arr];
for (let i = 0; i < res.length; i++) {
let min = i;
for (let j = i + 1; j < res.length; j++) {
if (res[j] < res[min]) min = j;
}
[res[i], res[min]] = [res[min], res[i]];
}
return res;
}
// Insertion Sort
function insertionSort(arr) {
const res = [...arr];
for (let i = 1; i < res.length; i++) {
let key = res[i];
let j = i - 1;
while (j >= 0 && res[j] > key) {
res[j + 1] = res[j];
j--;
}
res[j + 1] = key;
}
return res;
}
// Merge Sort
function mergeSort(arr) {
if (arr.length <= 1) return arr;
const mid = Math.floor(arr.length / 2);
const left = mergeSort(arr.slice(0, mid));
const right = mergeSort(arr.slice(mid));
return merge(left, right);
}
function merge(left, right) {
let result = [],
i = 0,
j = 0;
while (i < left.length && j < right.length) {
result.push(left[i] < right[j] ? left[i++] : right[j++]);
}
return result.concat(left.slice(i)).concat(right.slice(j));
}
module.exports = {
bubbleSort,
selectionSort,
insertionSort,
mergeSort,
};