JSFiddle - React, Tailwind, and code Playground
by alhambra1
HTML
<div id="output"></div>
JavaScript
var a = [2,1,3,5,4,0]
, b = [4,2,0,6,1,3,7,5]
function rearrange(arr){
var visited = 0,tmp,indexes,zeroTo
function cycle(startIx){
tmp = {start: startIx, value: arr[startIx]}
indexes = {from: arr[startIx], to: startIx}
while (indexes.from != tmp.start){
if (arr[indexes.from] == 0)
zeroTo = indexes.to
if (indexes.to == visited){
visited++
arr[indexes.to] = arr[indexes.from]
} else {
arr[indexes.to] = -arr[indexes.from]
}
indexes.to = indexes.from
if (indexes.from != tmp.start)
indexes.from = arr[indexes.from]
}
if (indexes.to == visited){
visited++
arr[indexes.to] = tmp.value
} else {
arr[indexes.to] = -tmp.value
}
}
while (visited < arr.length - 1){
cycle(visited)
while (arr[visited] < 0 || visited == zeroTo){
arr[visited] = -arr[visited]
visited++
}
}
return arr
}
document.getElementById("output").innerHTML =
"<p>" + JSON.stringify(a) + "<br />"
+ JSON.stringify(rearrange(a)) + "</p><p>"
+ JSON.stringify(b) + "<br />"
+ JSON.stringify(rearrange(b)) + "</p>"