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