-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbinary-search.js
More file actions
28 lines (17 loc) · 1.61 KB
/
Copy pathbinary-search.js
File metadata and controls
28 lines (17 loc) · 1.61 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
// Este algoritmo de busca só funciona em arrays já ordenados
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function binarySearch(numbers, target) { // Recebe o array de números a ser ordenado e o valor a ser encontrado
let start = 0; // define o índice do valor de ínicio, por padrão 0
let end = numbers.length - 1; // Define o índice do último elemento do array
let middle = Math.trunc((start + end) / 2); // Define o índice do elemento que fica no meio do array, fazendo o arredondamento do valor para evitar números flutuantes
while (start <= end) { // Enquanto a posição inicial for menor ou igual á posição final
if (target === numbers[middle]) { // Caso o valor a ser encontrado estiver no meio do array, retorna esse valor e encerra a execução
return numbers[middle];
}
if (start === end && target !== numbers[middle]) return "Not found"; // Se já tiver no último elemento restante do array e ainda não tiver encontrado o valor, retorna uma mensagem de Not Found!
target > numbers[middle] ? start = middle + 1 : end = middle - 1; // Se o valor a ser encontrado for maior que o valor da metade do array, o ínicio passa a ser um índice depois da metade, e a outra metade da esquerda é ignorada
// Se não o fim do array passa a ser uma posição a menos do meio do array e o ínicio continua sendo 0, desta forma ignorando a metade da direita.
middle = Math.trunc((start + end) / 2); // Divide o array pela metade, conferindo os valores da esquerda e direita
}
}
console.log(binarySearch(numbers, 2))