Общие алгоритмы и структуры данных с примерами кода

  1. Двоичный поиск:

    • Описание: поиск определенного элемента в отсортированном массиве путем многократного деления интервала поиска пополам.
    def binary_search(arr, target):
       low = 0
       high = len(arr) - 1
       while low <= high:
           mid = (low + high) // 2
           if arr[mid] == target:
               return mid
           elif arr[mid] < target:
               low = mid + 1
           else:
               high = mid - 1
       return -1
  2. Пузырьковая сортировка:

    • Описание: Сортирует массив, многократно меняя местами соседние элементы, если они расположены в неправильном порядке.
    def bubble_sort(arr):
       n = len(arr)
    
       for i in range(n):
           for j in range(0, n - i - 1):
               if arr[j] > arr[j + 1]:
                   arr[j], arr[j + 1] = arr[j + 1], arr[j]
  3. Связанный список:

    • Описание: структура данных, состоящая из последовательности узлов, где каждый узел содержит данные и ссылку на следующий узел.
    class Node:
       def __init__(self, data):
           self.data = data
           self.next = None
    class LinkedList:
       def __init__(self):
           self.head = None
       def append(self, data):
           new_node = Node(data)
           if not self.head:
               self.head = new_node
           else:
               current = self.head
               while current.next:
                   current = current.next
               current.next = new_node
  4. Быстрая сортировка:

    • Описание: сортирует массив путем выбора опорного элемента и разделения остальных элементов на два подмассива в зависимости от того, меньше они или больше опорного элемента.
    def quick_sort(arr):
       if len(arr) <= 1:
           return arr
       else:
           pivot = arr[0]
           less = [x for x in arr[1:] if x <= pivot]
           greater = [x for x in arr[1:] if x > pivot]
           return quick_sort(less) + [pivot] + quick_sort(greater)
  5. Стек:

    • Описание: структура данных, которая соответствует принципу «Последним пришел — первым вышел» (LIFO), где последний добавленный элемент удаляется первым.
    class Stack:
       def __init__(self):
           self.stack = []
       def push(self, item):
           self.stack.append(item)
       def pop(self):
           if not self.is_empty():
               return self.stack.pop()
           else:
               return None
       def is_empty(self):
           return len(self.stack) == 0
  6. Поиск в ширину (BFS):

    • Описание: Обходит или ищет граф или дерево, исследуя все вершины на текущем уровне глубины перед переходом на следующий уровень.
    from collections import deque
    def bfs(graph, start):
       visited = set()
       queue = deque([start])
       visited.add(start)
       while queue:
           vertex = queue.popleft()
           print(vertex, end=" ")
           for neighbor in graph[vertex]:
               if neighbor not in visited:
                   queue.append(neighbor)
                   visited.add(neighbor)