-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbinary.js
More file actions
91 lines (82 loc) · 3.79 KB
/
binary.js
File metadata and controls
91 lines (82 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
function randomArray(searchType) {
let array = []
for(let i = 0; i < 15; i++) {
let randomInt = Math.floor(Math.random() * 100) + 1;
array.push(randomInt)
}
array.sort(function(a, b){return a - b})
array.map((arr, i) => {
document.getElementById(searchType).children[i].innerHTML = arr
})
return array
}
let binaryArray = randomArray("main")
let linearArray = randomArray("linear_main")
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
const binaryRun = async (sortedArray, key) => {
let start = 0;
let end = sortedArray.length - 1;
sortedArray.map((arr, i) => document.getElementById('main').children[i].style.borderColor = "#b3b3b3")
while(start <= end) {
let middle = Math.floor((start + end) / 2);
if (sortedArray[middle] === key) {
// found the key
document.getElementById('main').children[middle].style.borderColor = "#11b711"
for(let i = 0; i < document.getElementsByClassName('block').length; i++) {
document.getElementsByClassName('block')[i].style.boxShadow = "none"
}
document.getElementById('main').children[middle].style.boxShadow = "rgb(17 183 17 / 86%) 0px 0px 5px"
return middle;
} else if (sortedArray[middle] < key) {
// continue searching to the right
start = middle + 1;
document.getElementById('main').children[middle].style.borderColor = "#f34242"
for(let i = 0; i < document.getElementsByClassName('block').length; i++) {
document.getElementsByClassName('block')[i].style.boxShadow = "none"
}
document.getElementById('main').children[middle].style.boxShadow = "rgb(243 66 66 / 35%) 0px 0px 5px"
} else {
// search searching to the left
end = middle - 1;
document.getElementById('main').children[middle].style.borderColor = "#f34242"
for(let i = 0; i < document.getElementsByClassName('block').length; i++) {
document.getElementsByClassName('block')[i].style.boxShadow = "none"
}
document.getElementById('main').children[middle].style.boxShadow = "rgb(243 66 66 / 35%) 0px 0px 5px"
}
await sleep(500)
}
return -1;
}
const linearRun = async (sortedArray, key) => {
sortedArray.map((arr, i) => document.getElementById('linear_main').children[i].style.borderColor = "#b3b3b3")
for(let i = 0; i < sortedArray.length; i++) {
if(sortedArray[i] === key) {
document.getElementById('linear_main').children[i].style.borderColor = "green"
for(let i = 0; i < document.getElementsByClassName('block').length; i++) {
document.getElementsByClassName('block')[i].style.boxShadow = "none"
}
document.getElementById('linear_main').children[i].style.boxShadow = "rgb(17 183 17 / 86%) 0px 0px 5px"
return i
} else {
document.getElementById('linear_main').children[i].style.borderColor = "red"
for(let i = 0; i < document.getElementsByClassName('block').length; i++) {
document.getElementsByClassName('block')[i].style.boxShadow = "none"
}
document.getElementById('linear_main').children[i].style.boxShadow = "rgb(243 66 66 / 35%) 0px 0px 5px"
}
await sleep(500)
}
}
document.getElementById('number').onsubmit = function(e) {
e.preventDefault();
const number = parseInt(e.target.elements.number.value)
binaryRun(binaryArray, number)
}
document.getElementById('linear_number').onsubmit = function(e) {
e.preventDefault();
const number = parseInt(e.target.elements.linearnumber.value)
linearRun(linearArray, number)
}