diff --git a/lib/binarySearch/binarySearch.test.ts b/lib/binarySearch/binarySearch.test.ts new file mode 100644 index 0000000..792a679 --- /dev/null +++ b/lib/binarySearch/binarySearch.test.ts @@ -0,0 +1,14 @@ +import { describe, it, expect } from "vitest"; +import { binarySearch } from "./binarySearch"; + +describe("binarySearch", () => { + let sortedArray = [-12, 1, 4, 6, 22]; + + it("binarySearch should return index 2", () => { + expect(binarySearch(sortedArray, 4)).toBe(2); + }); + + it("binarySearch not find number 3 should return -1", () => { + expect(binarySearch(sortedArray, 3)).toBe(-1); + }); +}); diff --git a/lib/binarySearch/binarySearch.ts b/lib/binarySearch/binarySearch.ts new file mode 100644 index 0000000..d8e7322 --- /dev/null +++ b/lib/binarySearch/binarySearch.ts @@ -0,0 +1,28 @@ +export function binarySearch(sortedNumbers: number[], n: number) { + // Определяем точки начала и конца поиска + let start = 0; + let end = sortedNumbers.length; + + while (start < end) { + // Находим элемент в середине массива + const middle = Math.floor((start + end) / 2); + const value = sortedNumbers[middle]; + + // Сравниваем аргумент со значением в середине массива + if (n === value) { + return middle; + } + + // Если аргумент меньше, чем серединное значение, разделяем массив пополам + // Теперь конец массива — это его бывшая середина + if (n < value) { + end = middle; + // Иначе началом массива становится элемент, идущий сразу за «серединой» + } else { + start = middle + 1; + } + } + + // если искомое число не найдено, возвращаем -1 + return -1; +} diff --git a/lib/binarySearch/index.ts b/lib/binarySearch/index.ts new file mode 100644 index 0000000..5cbd207 --- /dev/null +++ b/lib/binarySearch/index.ts @@ -0,0 +1 @@ +export * from "./binarySearch";