Divide et Impera(Bars)
Imparte si cucereste
by MariusNastasa
HTML
<h3>Divide et Impera (Merge Sort Bars)</h3>
<input type="number" id="number">
<button onclick="addToArray()">Add Bar</button>
<button onclick="randomArray()">Random</button>
<br><br>
<div id="array" class="bars"></div>
<br>
<div id="result"></div>
<button onclick='display(mergeSort(a))' id="button">Sort</button>
<br><br><br>
<hr>
CSS
body {
background-color: moccasin;
}
h3 {
color: #ff8000;
font-variant: small-caps;
}
placeholder {
font-variant: small-caps;
}
button {
border-radius: 18px;
border-style: solid
}
button:hover span:after {
opacity: 1;
right: 0;
}
h2 {
font-variant: small-caps;
}
.bars div {
display: inline-block;
background: red;
height: 50px;
width: 9px;
margin-right: 1px
}
JavaScript
var a = [];
function addToArray() {
a.push(Number(document.getElementById("number").value));
display(a);
}
function display(a) {
document.getElementById("array").innerHTML = "";
for (var i = 0; i < a.length; i++) {
var divElement = document.createElement("div");
divElement.setAttribute("style", "height: " + a[i] * 10 + "px;");
document.getElementById("array").appendChild(divElement);
}
}
function mergeSort(a) {
if (a.length < 2) {
return a;
}
var mijloc = a.length / 2;
var stanga = a.slice(0, mijloc);
var dreapta = a.slice(mijloc, a.length);
return merge(mergeSort(stanga), mergeSort(dreapta));
}
function merge(s, d) {
var result = [];
while (s.length && d.length) {
if (s[0] <= d[0]) {
result.push(s.shift());
} else {
result.push(d.shift());
}
}
while (s.length) {
result.push(s.shift());
}
while (d.length) {
result.push(d.shift());
}
return result;
}
function randomArray() {
a = [];
var maxValuesInArray = Math.max(Math.floor(Math.random() * 30), 5);
for (var i = 0; i < maxValuesInArray; i++) {
a.push(Math.max(Math.floor(Math.random() * 25), 1));
}
display(a);
}