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);

}