Divide et Impera

Cautarea binara

by MariusNastasa

HTML

<h3>Divide et Impera (Binary Search)</h3>
<input type="number" id="number" />
<button onClick="addToArray()">Add Number</button>
<hr> Numerele sunt:
<div id="array"></div>
<hr>
<button onclick='document.getElementById("result").innerHTML = mergeSort(a)'>SORT</button>
<div id="result"></div>
<br>
<hr>
<input type="number" placeholder="Valoarea de cautare" id="searchNumber">
<button onclick='document.getElementById("resultBinarySearch").innerHTML = binarySearch(document.getElementById("searchNumber").value)' id="button">Binary Search</button>
<div id="resultBinarySearch"></div>

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() {
  var number = document.getElementById("number").value;
  a.push(Number(number));
  document.getElementById("array").innerHTML = a;
}

function mergeSort(a) {
  if (a.length < 2) {
    return a;
  }
  var mijloc = parseInt(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 binarySearch(v) {
  var low = 0;
  var high =a.length - 1;
  var mid = parseInt(low + high / 2);
  while (low <= high && a[mid] != v) {
    if (a[mid] < v) {
      low = mid + 1;
      mid = parseInt((low + high) / 2);
    } else {
      high = mid - 1;
      mid = parseInt((low + high) / 2);   
      console.log(mid);
    }
  }
  if(low>high){
  mid="Nu s-a gasit"
  }else{
  return mid;
  }
  
}