Skip to content

Instantly share code, notes, and snippets.

@jasonwaters
Created October 21, 2016 16:13
Show Gist options
  • Select an option

  • Save jasonwaters/abd5e79c527fa8bffea84d118e122116 to your computer and use it in GitHub Desktop.

Select an option

Save jasonwaters/abd5e79c527fa8bffea84d118e122116 to your computer and use it in GitHub Desktop.
Array.prototype.swap = function(idx1, idx2) {
if(idx1 >= this.length || idx2 >= this.length) {
throw new Error("index out of bounds");
}
let first = Math.max(idx1, idx2);
let last = Math.min(idx1, idx2);
let value = this.splice(first, 1, this[last])[0];
this.splice(last, 1, value);
};
function bubbleSort(arr) {
/* very inefficient -- O(n^2) */
let sorted;
let times = 0;
do {
sorted = true;
for(var i=0;i<arr.length-1;i++) {
if(arr[i] > arr[i+1]) {
arr.swap(i, i+1);
sorted = false;
}
}
times++;
} while(!sorted);
console.log(`bubble sort took ${times} passes`);
return arr;
}
function selectionSort(arr) {
let len = arr.length;
for(var i=0;i<len;i++) {
let min = i;
for(var j=i+1;j<len;j++) {
if(arr[j] < arr[min]) {
min = j;
}
}
arr.swap(min, i);
}
return arr;
}
function insertionSort(arr) {
let len = arr.length;
let value, hole;
for(var i=0;i<len;i++) {
value = arr[i];
for(var j=i-1; j> -1 && arr[j] > value;j--) {
arr[j+1] = arr[j];
}
arr[j+1] = value;
}
return arr;
}
function quickSort(arr) {
if (arr.length == 0) return [];
var left = [], right = [], pivot = arr[arr.length-1];
for (var i = 0; i < arr.length-1; i++) {
if(arr[i] < pivot)
left.push(arr[i]);
else
right.push(arr[i]);
}
return quickSort(left).concat(pivot, quickSort(right));
}
let list = [1]; //[100,5,35,99,0,9,8,7,1,15,2,6,10,11,-3,5];
console.log(list);
list = quickSort(list);
console.log(list);
function merge(left, right){
var result = [],
il = 0,
ir = 0;
while (il < left.length || ir < right.length){
if (left[il] < right[ir]){
result.push(left[il]);
il++;
} else {
result.push(right[ir]);
ir++;
}
}
return result;
}
console.log(merge([0,5,2], [2,3,1]));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment