Skip to content

Instantly share code, notes, and snippets.

@namhyun-gu
Last active January 13, 2017 02:14
Show Gist options
  • Save namhyun-gu/aad95213e3ef30e003b048c778073b10 to your computer and use it in GitHub Desktop.
Save namhyun-gu/aad95213e3ef30e003b048c778073b10 to your computer and use it in GitHub Desktop.
Quicksort (Javascript)
'use strict';
function ArrayUtil() { }
ArrayUtil.prototype.show = function(arr, rowLength = 5) {
var lengthCount = rowLength;
arr.forEach(function(element) {
process.stdout.write(element + "\t");
lengthCount--;
if (lengthCount == 0) {
process.stdout.write("\n");
lengthCount = rowLength;
}
}, this);
console.log('length : ' + arr.length);
}
ArrayUtil.prototype.generateMockData = function(size, maxium_value, overlapped = false) {
var data = [];
for (var i = 0; i < size; ) {
var number = Math.round(Math.random() * maxium_value);
if (overlapped) {
data.push(number);
i++;
} else if (!ArrayUtil.prototype.isNumberExist(data, number)) {
data.push(number);
i++;
}
}
return data;
}
ArrayUtil.prototype.isNumberExist = function(arr, number) {
return arr.indexOf(number) > -1 ? true : false;
}
function quicksort(arr) {
if (arr.length <= 1) {
return arr;
}
var lte = [];
var gte = [];
var pivotArr = [];
var pivot = arr[parseInt(arr.length / 2)];
for (var i = arr.length - 1; i >= 0; i--) {
if (arr[i] > pivot) {
gte.push(arr[i]);
} else if (arr[i] < pivot){
lte.push(arr[i]);
} else {
// Push overlapped value.
pivotArr.push(arr[i]);
}
}
return Array.prototype.concat(quicksort(lte), pivotArr, quicksort(gte));
}
/*
Script option
-size [integer] : Mock data size ex) -size 100
-maxium [integer] : Maxium mock data value. ex) -maxium 100
-overlap : Overlapped mock data value.
-no-display : Not showing mock data.
*/
var mockDataSize = process.argv.indexOf('-size') > 0 ? process.argv[process.argv.indexOf('-size') + 1] : 100;
var mockMaxiumValue = process.argv.indexOf('-maxium') > 0 ? process.argv[process.argv.indexOf('-maxium') + 1] : 100;
var isOverlapped = process.argv.indexOf('-overlap') > 0 ? true : false;
var isMockShow = process.argv.indexOf('-no-display') > 0 ? false : true;
var data = ArrayUtil.prototype.generateMockData(mockDataSize, mockMaxiumValue, isOverlapped);
if (isMockShow) {
console.log("<Before sort>");
ArrayUtil.prototype.show(data);
}
var startTime = new Date().getTime();
// Sort test
data = quicksort(data);
var elapsedTime = (new Date().getTime() - startTime) / 1000;
console.log();
if (isMockShow) {
console.log("<After sort>");
ArrayUtil.prototype.show(data);
console.log();
}
console.log('Elapsed Time : ' + elapsedTime);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment