1. Алгоритмы

Алгоритм — это компьютерная процедура, которая очень похожа на рецепт (называемый процедурой) и точно сообщает вашему компьютеру, какие шаги нужно предпринять, чтобы решить проблему или достичь цели.

2. Большое О

Мы используем это обозначение для сравнения эффективности различных подходов к проблеме. Обозначение Big O записывается в виде O(n), где O означает «порядок величины». Он описывает время выполнения задачи по отношению к количеству шагов, необходимых для ее выполнения, в зависимости от размера ввода.

Постоянная сложность: O(1)
Время выполнения постоянной задачи не изменится независимо от входного значения.
Линейная сложность: O(n)
время выполнения увеличивается на порядок, пропорциональный n.
Квадратичная сложность: O(N²)
общее время выполнения увеличивается на порядок величина пропорциональна N².
Логарифмическая сложность: O(log n)
Этот тип алгоритма делает вычисления молниеносно быстрыми. Вместо увеличения времени, необходимого для выполнения каждого последующего шага, время уменьшается на величину, обратно пропорциональную N.

4. Факториал

//iterative factorial
function factorial(n){
  let result = 1;
  for(let i=n; i>1; i--) result *=i;
  return result;
}
const factorial = factorial(5);
console.log(factorial);
//recursive way to find factorial
function factorialRecursive(n){
  if(n==2) return n;
  return n * factorialRecursive(n-1);
}
const factorialRecursive= factorialRecursive(5);
console.log(factorialRecursive)

5. Последовательность Фибоначчи

function fibonacci(terms){
  let fiboSeq = [];  for(let i=0; i<terms; i++){
    i===0 || i===1 ? fiboSeq.push(i) : fiboSeq.push(fiboSeq[i-1] + fiboSeq[i-2]);
  }  return fiboSeq;
}
console.log(fibonacci(9))

//using recursion
function fibonacci(num) {
if (num <= 1) return 1;
return fibonacci(num-2 ) + fibonacci(num - 1);
}
let n = 9 //this value will be inputed
for(let i=0; i<n; i++)
{
console.log(fibonacci(i))
}

6. Линейный поиск

let arr = [5,1,4,2,8];
function linerSearch(value){
  for(let i=0; i < arr.length; i++){
    if(arr[i] === value) return "Found at index: "+i;
  }
  return "Not found";
}
console.log(linerSearch(66))
console.log(linerSearch(8)

7. Пузырьковая сортировка

Он сравнивает каждую пару соседних элементов и меняет их местами, если они находятся в неправильном порядке.

function bubbleSort(arr){
  for(let i=0; i < arr.length; i++){
    for(let j=i+1; j<arr.length; j++){
      if(arr[i] > arr[j]){
        let temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}

console.log(bubbleSort([5,1,4,2,8]));

8. Сортировка выбором

Алгоритм сортировки выбором сортирует массив, многократно находя минимальный элемент (с учетом возрастания) из несортированной части и помещая его в начало.

let selectionSort = (arr) => {
let len = arr.length;
for (let i = 0; i < len; i++) {
   let min = i;
   for (let j = i + 1; j < len; j++) {
      if (arr[min] > arr[j]) {
      min = j;
      }
   }
  if (min !== i) {
    let tmp = arr[i];
    arr[i] = arr[min];
    arr[min] = tmp;
  }
}
return arr;
}

9. Сортировка вставками

Сортировка вставками – это простой алгоритм сортировки, который создает окончательный отсортированный массив (или список) по одному элементу за раз.

function insertionSort(arr){
  for(let i=1; i < arr.length; i++){     let temp = arr[i]          let j = i-1;
     for(; j >= 0; j--){         if(arr[j] > temp) arr[j+1] = arr[j];
         else break;
     }
     j++;
   
     arr[j] = temp;
    
  }
  return arr;
}