Skip to content

Instantly share code, notes, and snippets.

@harberg
Created November 13, 2016 07:34
Show Gist options
  • Save harberg/42140c0eabc575e0fe4cdf6105bf5315 to your computer and use it in GitHub Desktop.
Save harberg/42140c0eabc575e0fe4cdf6105bf5315 to your computer and use it in GitHub Desktop.
var zigzag = [4, 23, -5, -9, -19, -89];
// should look like [23, -89, 4, -19, -9, -5];
function arrSplit(arr) {
var negArr = [], posArr = [];
for (var i = 0; i < arr.length; i++) {
if(arr[i] > 0) {
posArr.push(arr[i]);
} else {
negArr.push(arr[i]);
}
}
posArr = posArr.sort(reversePosNum);
negArr = negArr.sort(orderNegNum);
merge(posArr, negArr);
}
function reversePosNum(a, b) {
return b - a;
}
function orderNegNum(a, b) {
return a - b;
}
function merge(arr1, arr2) {
var zigzagArr = [];
var longArr = [];
var shortArr = [];
arr1.length > arr2.length ? (longArr = arr1, shortArr = arr2) : (longArr = arr2, shortArr = arr1);
for( var i = 0; i < longArr.length; i++) {
if( shortArr[i] ) {
zigzagArr.push(arr1[i], arr2[i]);
} else {
var lastEl = longArr.pop();
zigzagArr.push(longArr[i], lastEl);
}
}
return zigzagArr;
}
// Call arrSplit() to see the final array
arrSplit(zigzag);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment