Сортировка двумерного массива в C++: подробное руководство с примерами

В C++ двумерный массив по существу представляет собой массив массивов. Сортировка двумерного массива предполагает расположение его элементов в определенном порядке на основе определенного критерия. В этой статье блога мы рассмотрим различные методы сортировки 2D-массива на C++, попутно предоставляя примеры кода и пояснения.

Метод 1: пузырьковая сортировка
Пузырьковая сортировка — это простой алгоритм сортировки, который многократно проходит по массиву, сравнивает соседние элементы и меняет их местами, если они расположены в неправильном порядке. Процесс повторяется до тех пор, пока не будет отсортирован весь массив.

void bubbleSort(int arr[][N], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols - 1; j++) {
            for (int k = 0; k < cols - j - 1; k++) {
                if (arr[i][k] > arr[i][k + 1]) {
                    int temp = arr[i][k];
                    arr[i][k] = arr[i][k + 1];
                    arr[i][k + 1] = temp;
                }
            }
        }
    }
}

Метод 2: Сортировка выбором
Сортировка выбором сортирует массив путем многократного поиска минимального элемента в неотсортированной части массива и помещения его в начало. Этот процесс выполняется для каждой строки 2D-массива.

void selectionSort(int arr[][N], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols - 1; j++) {
            int minIndex = j;
            for (int k = j + 1; k < cols; k++) {
                if (arr[i][k] < arr[i][minIndex]) {
                    minIndex = k;
                }
            }
            if (minIndex != j) {
                int temp = arr[i][j];
                arr[i][j] = arr[i][minIndex];
                arr[i][minIndex] = temp;
            }
        }
    }
}

Метод 3: сортировка STL
Стандартная библиотека C++ (STL) предоставляет универсальный и эффективный алгоритм сортировки, называемый std::sort(). Чтобы использовать этот метод, вам необходимо преобразовать 2D-массив в линейный контейнер, отсортировать его и преобразовать обратно в 2D-массив.

void stlSort(int arr[][N], int rows, int cols) {
    std::vector<int> temp;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            temp.push_back(arr[i][j]);
        }
    }
    std::sort(temp.begin(), temp.end());
    int index = 0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            arr[i][j] = temp[index++];
        }
    }
}

.

bool customComparator(const std::vector<int>& a, const std::vector<int>& b) {
    int sumA = std::accumulate(a.begin(), a.end(), 0);
    int sumB = std::accumulate(b.begin(), b.end(), 0);
    return sumA < sumB;
}
void customSort(int arr[][N], int rows, int cols) {
    std::vector<std::vector<int>> temp;
    for (int i = 0; i < rows; i++) {
        std::vector<int> row(arr[i], arr[i] + cols);
        temp.push_back(row);
    }
    std::sort(temp.begin(), temp.end(), customComparator);
    for (int i = 0; i < rows; i++) {
        std::copy(temp[i].begin(), temp[i].end(), arr[i]);
    }
}

Сортировку двумерного массива в C++ можно выполнить с помощью различных методов, таких как пузырьковая сортировка, сортировка выбором, сортировка STL и пользовательские компараторы. Каждый метод имеет свои преимущества и подходит для разных сценариев. Понимая эти методы, вы сможете эффективно сортировать двумерные массивы в соответствии с вашими конкретными требованиями.

Не забудьте выбрать подходящий метод в зависимости от размера массива и желаемых критериев сортировки. Приятного кодирования!