Skip to content

Instantly share code, notes, and snippets.

@minsooshin
Last active August 29, 2015 14:21
Show Gist options
  • Save minsooshin/2716c3bbb0245afb94fd to your computer and use it in GitHub Desktop.
Save minsooshin/2716c3bbb0245afb94fd to your computer and use it in GitHub Desktop.
Javascript Sortings (bubble, insert, and quick)
/**
* Simple Javascript sorting implementation
* bubble, insert, quick
* @author Mason Shin
*/
var Sortings = (function() {
/**
* privates
*/
/**
* Swap two values
*
* @param Array arr Array object
* @param Integer idA Index of first element to be swapped
* @param Integer idB Index of second element to be swapped
*/
function swap(arr, idA, idB) {
var tmp = arr[idA];
arr[idA] = arr[idB];
arr[idB] = tmp;
}
/**
* Shuffle
* Fisher-Yates
*
* @param Array arr Array to be shuffled.
* return Array arr Array has been shuffled.
*/
function shuffle(arr) {
var currentId = arr.length,
tmp, randomId;
while (currentId !== 0) {
randomId = Math.floor(Math.random() * currentId);
currentId--;
swap(arr, currentId, randomId);
}
return arr;
}
/**
* BubbleSort
*
* @param Array arr Array is to be sorted.
*
* HowTo:
* var foo = Sortings.bubble(Sortings.shuffle([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]));
*/
function bubble(arr) {
do {
var swapped = false;
for (var i = 0, len = arr.length; i < len; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
swapped = true;
}
}
} while (swapped)
return arr;
}
/**
* InsertSort
*
* @param Array arr Array is to be sorted.
*
* HowTo:
* var foo = Sortings.insert(Sortings.shuffle([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]));
*/
function insert(arr) {
for (var i = 1, len = arr.length; i < len; i++) {
var tmp = arr[i],
j = i - 1;
for (; j >= 0 && arr[j] > tmp; --j) {
arr[j + 1] = arr[j];
}
arr[j + 1] = tmp;
}
return arr;
}
/**
* QuickSort
*
* @param Array arr Array is to be sorted.
* return Array concatenated by pivot.
*
* HowTo:
* var foo = Sortings.quick(Sortings.shuffle([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]));
*/
function quick(arr) {
if (arr.length === 0) {
return [];
}
var left = [], right = [], pivot = arr[0];
for (var i = 1, len = arr.length; i < len; i++) {
arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
}
return quick(left).concat(pivot, quick(right));
}
return {
shuffle: shuffle,
bubble: bubble,
insert: insert,
quick: quick
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment