Sobes.tech
Junior

Кои алгоритми за сортиране знаете?

sobes.tech AI

Отговор от AI

Основни алгоритми за сортиране:

  • Bubble Sort (Bubble Sort): Прост, но неефективен алгоритъм, който многократно преминава през списъка, разменяйки съседните елементи, ако са в неправилен ред.
  • Selection Sort (Сортиране чрез избор): Намира най-малкия (или най-големия) елемент от несортирания част на списъка и го поставя в началото.
  • Insertion Sort (Вмъкване): Постепенно изгражда сортиран списък, като вмъква всеки нов елемент на правилното място в вече сортирания сегмент.
  • Merge Sort (Сливане): Рекурсивен алгоритъм, който разделя списъка на подсписъци, ги сортира и след това ги обединява.
  • Quick Sort (Бързо сортиране): Алгоритъм "разделяй и владей", който избира опорен елемент (pivot) и преразпределя елементите така, че по-малките да са отляво, а по-големите отдясно. След това рекурсивно прилага към подсписъците.
  • Shell Sort (Shell): Подобрение на сортирането чрез вмъкване, използващо сравнения на големи разстояния между елементите.
  • Heap Sort (Куча): Използва структурата данни "купа" за ефективно сортиране.

Съществуват и по-малко разпространени, но ефективни в определени случаи алгоритми като сортиране по броене (Counting Sort), поразрядно сортиране (Radix Sort), и сортиране с кутии (Bucket Sort).

Времето за изпълнение на основните алгоритми (средно):

Алгоритъм за сортиране Средно време
Bubble Sort O(n²)
Selection Sort O(n²)
Insertion Sort O(n²)
Merge Sort O(n log n)
Quick Sort O(n log n)
Shell Sort Зависи от стъпката
Heap Sort O(n log n)

Пример за реализация на бързото сортиране на Python:

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]  # Избиране на опорен елемент
    left = [x for x in arr if x < pivot]  # По-малки от опорния
    middle = [x for x in arr if x == pivot] # Равни на опорния
    right = [x for x in arr if x > pivot] # По-големи от опорния
    return quicksort(left) + middle + quicksort(right) # Рекурсивно сортиране и обединяване