Skip to content

Instantly share code, notes, and snippets.

@lazamar
Last active March 15, 2024 15:49
Show Gist options
  • Save lazamar/5217c5c46d04ac8dcf700d45abbfb451 to your computer and use it in GitHub Desktop.
Save lazamar/5217c5c46d04ac8dcf700d45abbfb451 to your computer and use it in GitHub Desktop.
Bubble sort and merge sort
// run with `node index.js`
function bubbleSort(list) {
for (let limit = 1; limit < list.length; limit++) {
for (let i = 0; i < list.length - limit; i++) {
let left = list[i];
let right = list[i + 1];
if (left > right) {
list[i] = right;
list[i+1] = left;
}
}
}
return list;
}
function merge(left, right) {
let lpos = 0;
let rpos = 0;
let result = [];
for (let i = 0; i < (left.length + right.length); i++) {
if (lpos === left.length) {
result.push(right[rpos]);
rpos = rpos + 1;
} else if (rpos === right.length) {
result.push(left[lpos]);
lpos = lpos + 1;
} else if (left[lpos] < right[rpos]) {
result.push(left[lpos]);
lpos = lpos + 1;
} else {
result.push(right[rpos]);
rpos = rpos + 1;
}
}
return result;
}
function mergeSort(list) {
if (list.length == 1) {
return list;
}
// divide in two
let left = list.slice(0, list.length / 2);
let right = list.slice(list.length / 2, list.length);
// sort each half
let sorted_left = mergeSort(left);
let sorted_right = mergeSort(right);
// merge
return merge(sorted_left, sorted_right);
}
function sortTimed(sortFun, list) {
// Start timing
const startTime = process.hrtime();
let sorted = sortFun(list);
const endTime = process.hrtime(startTime);
const elapsedNanoseconds = endTime[1];
return elapsedNanoseconds
}
function main() {
var list = [];
for (var i = 0; i <= 100000; i++) {
list.push(i);
}
let time = sortTimed(bubbleSort, list);
console.log(`Bubble sort: ${time}ns`);
let time2 = sortTimed(mergeSort, list);
console.log(`Merge sort: ${time2}ns`);
console.log(`Proportion: ${Math.ceil(100 * time / time2)}% slower`);
}
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment