Last active
August 29, 2015 14:21
-
-
Save minsooshin/2716c3bbb0245afb94fd to your computer and use it in GitHub Desktop.
Javascript Sortings (bubble, insert, and quick)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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