В 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 и пользовательские компараторы. Каждый метод имеет свои преимущества и подходит для разных сценариев. Понимая эти методы, вы сможете эффективно сортировать двумерные массивы в соответствии с вашими конкретными требованиями.
Не забудьте выбрать подходящий метод в зависимости от размера массива и желаемых критериев сортировки. Приятного кодирования!