C++

Std: sort, обычный массив и vector

Для сортировки массива в C++ чаще всего используют std::sort из заголовка <algorithm>. Это стандартный способ: он короче, надежнее и быстрее учебной ручной сортировки в большинстве обычных задач

Минимальный пример:

#include <algorithm>
#include <iostream>

int main() {
    int numbers[] = {5, 2, 9, 1, 7};

    std::sort(numbers, numbers + 5);

    for (int number : numbers) {
        std::cout << number << " ";
    }

    return 0;
}

Вывод:

1 2 5 7 9

Первый аргумент std::sort — начало диапазона, второй — конец диапазона. Конец не включается в сортировку. Для массива из 5 элементов это numbers + 5

Как не писать размер вручную

Если компилятор поддерживает C++17, можно использовать std::size:

#include <algorithm>
#include <iostream>
#include <iterator>

int main() {
    int numbers[] = {5, 2, 9, 1, 7};

    std::sort(numbers, numbers + std::size(numbers));

    for (int number : numbers) {
        std::cout << number << " ";
    }

    return 0;
}

Так безопаснее: если элементов станет больше, не придется менять число вручную

Сортировка vector

В современном C++ вместо обычного массива часто используют std::vector. Он хранит размер внутри себя и удобнее для задач, где количество элементов может меняться

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {5, 2, 9, 1, 7};

    std::sort(numbers.begin(), numbers.end());

    for (int number : numbers) {
        std::cout << number << " ";
    }

    return 0;
}

Результат будет таким же:

1 2 5 7 9

Сортировка по убыванию

Чтобы отсортировать по убыванию, передайте третий аргумент — функцию сравнения. Для чисел можно использовать std::greater<int>()

#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {5, 2, 9, 1, 7};

    std::sort(numbers.begin(), numbers.end(), std::greater<int>());

    for (int number : numbers) {
        std::cout << number << " ";
    }

    return 0;
}

Вывод:

9 7 5 2 1

Сортировка строк

std::sort работает не только с числами:

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> names = {"Ivan", "Anna", "Oleg"};

    std::sort(names.begin(), names.end());

    for (const std::string& name : names) {
        std::cout << name << "\n";
    }

    return 0;
}

Строки будут отсортированы по лексикографическому порядку

Когда нужна ручная сортировка

Ручную сортировку пузырьком или выбором имеет смысл писать в учебной задаче, когда преподаватель просит показать алгоритм. В реальном коде лучше брать std::sort

Пример учебной сортировки пузырьком:

for (int i = 0; i < n - 1; ++i) {
    for (int j = 0; j < n - i - 1; ++j) {
        if (a[j] > a[j + 1]) {
            std::swap(a[j], a[j + 1]);
        }
    }
}

Но если нет требования писать алгоритм вручную, этот вариант проигрывает стандартному

Частые ошибки

Забыть include

Для std::sort нужен заголовок:

#include <algorithm>

Для std::greater нужен:

#include <functional>

Передать неправильный конец диапазона

Правильно:

std::sort(numbers, numbers + 5);

Неправильно:

std::sort(numbers, numbers + 4);

Во втором случае последний элемент не попадет в сортировку

Короткий вывод

Для сортировки массива в C++ используйте std::sort. Для обычного массива передавайте указатели на начало и конец, для std::vector — begin() и end(). Ручную сортировку оставляйте для учебных задач по алгоритмам

Связанные материалы:

Что почитать дальше по C++

Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x