Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. Как сортировать массив по возрастанию: простые алгоритмы и код

Как сортировать массив по возрастанию: простые алгоритмы и код

Запланировано Прикреплена Закрыта Перенесена Языки программирования
сортировка массиваалгоритмы сортировкипо возрастанию
1 Сообщения 1 Постеры 4 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал отредактировано
    #1

    Сортировка массива по возрастанию — базовая задача в программировании. Она помогает упорядочить данные, чтобы быстро находить нужные элементы или готовить их к обработке. Мы разберём популярные методы, их принцип работы и примеры кода на разных языках.

    Это полезно для новичков и опытных разработчиков. Вы поймёте, как выбрать подходящий алгоритм в зависимости от размера данных. Проблемы вроде медленной работы с большими массивами или ошибок в логике сравнения уйдут после освоения этих приёмов.

    Сортировка пузырьком: простой старт для понимания

    Сортировка пузырьком работает последовательно: сравнивает соседние элементы и меняет их местами, если они в неправильном порядке. За один проход самый большой элемент ‘всплывает’ в конец массива. Повторяем проходы, пока массив не упорядочится полностью. Этот метод интуитивен, но неэффективен для больших данных из-за O(n²) сложности.

    Рассмотрим пример: массив [5, 3, 8, 4, 2]. Первый проход: сравниваем 5 и 3 — меняем, получаем [3, 5, 8, 4, 2]; дальше 5 и 8 — оставляем, 8 и 4 — меняем и так далее. В итоге 8 уходит в конец. Второй проход работает с первыми четырьмя элементами. Легко отследить на бумаге, что делает его хорошим для обучения.

    • Преимущества: Простой код, легко реализовать без рекурсии.
    • Недостатки: Медленно на больших массивах, много ненужных сравнений.
    • Когда использовать: Для маленьких массивов (до 100 элементов) или демонстрации принципа.
    Шаг Массив после прохода
    0 [5, 3, 8, 4, 2]
    1 [3, 5, 4, 2, 8]
    2 [3, 4, 2, 5, 8]
    Финал [2, 3, 4, 5, 8]

    Сортировка выбором: поиск минимума на каждом шаге

    Здесь алгоритм на каждом шаге ищет минимальный элемент в неотсортированной части и ставит его в начало. Нет лишних обменов соседями — только финальная подмена. Сложность тоже O(n²), но на практике чуть быстрее пузырька за счёт меньшего числа перестановок.

    Пример с тем же массивом [5, 3, 8, 4, 2]: ищем минимум (2), меняем с первым элементом — [2, 3, 8, 4, 5]. Далее в подмассиве [3, 8, 4, 5] минимум 3 уже на месте, ищем дальше (4) и меняем со вторым. Логика прозрачна: всегда работаем с хвостом массива. Подходит для частично отсортированных данных.

    Вот псевдокод:

    for i from 0 to n-1:
        min_idx = i
        for j from i+1 to n:
            if array[j] < array[min_idx]:
                min_idx = j
        swap array[i], array[min_idx]
    
    • Нюанс: Если массив уже отсортирован, всё равно делаем все сравнения.
    • Вариант: Можно искать максимум и ставить в конец.
    • Код на Python:
    arr = [5, 3, 8, 4, 2]
    for i in range(len(arr)):
        min_idx = i
        for j in range(i+1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    print(arr)  # [2, 3, 4, 5, 8]
    

    Быстрая сортировка: эффективность через рекурсию

    QuickSort выбирает опорный элемент (pivot), перераспределяет массив: меньшие слева, большие справа. Затем рекурсивно сортирует подмассивы. Средняя сложность O(n log n) — идеально для больших данных. Худший случай (отсортированный массив) замедляет до O(n²), но рандомизация pivot помогает.

    Возьмём [5, 3, 8, 4, 2], pivot=5. Меньшие (3,4,2) слева, большие (8) справа: [3,4,2,5,8]. Рекурсия на [3,4,2] и . Быстро разбивает задачу на мелкие. В C++ или JS это стандарт для массивов.

    Важно: Выбор pivot — ключ к скорости. Часто берут первый, средний или случайный.

    Алгоритм Сложность (средняя) Стабильность
    Пузырьком O(n²) Да
    Выбором O(n²) Нет
    QuickSort O(n log n) Нет

    Код на JavaScript:

    const quickSort = (arr) => {
      if (arr.length <= 1) return arr;
      const pivot = arr;
      const left = [];
      const right = [];
      for (let i = 1; i < arr.length; i++) {
        if (arr[i] < pivot) left.push(arr[i]);
        else right.push(arr[i]);
      }
      return [...quickSort(left), pivot, ...quickSort(right)];
    };
    console.log(quickSort([5,3,8,4,2])); // [2,3,4,5,8]
    

    Встроенные методы: когда не стоит изобретать велосипед

    Современные языки предлагают готовые функции сортировки. В JavaScript array.sort((a,b)=>a-b) для чисел по возрастанию. В Java Arrays.sort(arr) делает то же. Они оптимизированы (Timsort или аналог), стабильны и быстры — O(n log n).

    Пример JS: [10, 5, 40].sort((a,b)=>a-b) даёт [5,10,40]. Без компаратора сортирует как строки: [10,40,5]. В Python sorted(arr) или arr.sort(). Не пишите свой код, если нет специальных нужд вроде кастомного сравнения.

    • JavaScript: nums.sort((a, b) => a - b) — строго по возрастанию.
    • Нюанс: sort() мутирует массив, используйте копию если нужно.
    • Java: Arrays.sort(arr); — для примитивов работает идеально.

    Гибридные подходы и оптимизации в практике

    Для реальных задач комбинируйте: QuickSort для больших массивов, вставка для малых. Это как в Arrays.sort в Java — гибрид Timsort. Ещё учтите стабильность: пузырьком сохраняет порядок равных элементов, QuickSort — нет.

    В мобильной разработке или фронтенде встроенные методы покрывают 90% случаев. Но знание алгоритмов помогает дебажить и оптимизировать. Подумайте о памяти: рекурсивный QuickSort может переполнить стек на огромных данных — используйте итеративный вариант.

    Практика показывает: Для 10k элементов встроенный sort в 10-100 раз быстрее самописного пузырька. Тестируйте на реальных данных.

    Массивы в действии: от теории к повседневке

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

    1 ответ Последний ответ
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы