-
Двоичный поиск:
- Описание: поиск определенного элемента в отсортированном массиве путем многократного деления интервала поиска пополам.
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 -
Пузырьковая сортировка:
- Описание: Сортирует массив, многократно меняя местами соседние элементы, если они расположены в неправильном порядке.
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] -
Связанный список:
- Описание: структура данных, состоящая из последовательности узлов, где каждый узел содержит данные и ссылку на следующий узел.
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 -
Быстрая сортировка:
- Описание: сортирует массив путем выбора опорного элемента и разделения остальных элементов на два подмассива в зависимости от того, меньше они или больше опорного элемента.
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) -
Стек:
- Описание: структура данных, которая соответствует принципу «Последним пришел — первым вышел» (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 -
Поиск в ширину (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)