Как с помощью .sort() отсортировать двумерный массив?
Если у вас нативный массив типо int ** то его можно сортировать как одномерный.
int arr[10][10]; //какая-то инициализация std::sort(arr,arr + 10*10,std::greater());
Отслеживать
ответ дан 11 дек 2012 в 12:16
Andrey Buran Andrey Buran
921 6 6 серебряных знаков 15 15 бронзовых знаков
Автор, конечно, так и не сказал, по каким критериям он хочет сортировать матрицу, но в Вашем случае всякая связь элементов со строками/столбцами исходного массива просто теряется.
11 дек 2012 в 14:39
Любая задача по сортировке 2d массива с учётом его размерности в итоге всегда сведётся к сортировке набора 1d массивов. Если это правило не выполняется, то как правило стоит задуматься о смене дизайна.
11 дек 2012 в 16:59
Но обычно переупорядочивают строки или столбцы, а не перемешивают содержимое матрицы.
11 дек 2012 в 17:20
Обычно странное слово в данном контексте
12 дек 2012 в 8:45
bool compare(int* x, int* y)
// Двумерный массив int** array = . // Количество строк int rows = . // Сортировка массива std::sort(array, array + rows, &compare);
Отслеживать
ответ дан 8 дек 2012 в 7:24
34.5k 26 26 золотых знаков 98 98 серебряных знаков 214 214 бронзовых знаков
не взлетит. вы отсортируете элементы с первого по первый плюс количество строк массива.
11 дек 2012 в 12:11
Если Вам нужно, то, что на рисунке ниже, а также, нужен сам алгоритм сортировки (технология), то разбирайтесь с моим кодом.

Код сортировки методом «пузырька» — один из самых простых и самых несовершенных:
#include #include #include using namespace std; int main() < srand(time(0)); int a[20][20]; int b[20][20]; unsigned short n, m, i, j, k; do < cout > n; cout > m; > while (((n < 2) || (n >20)) || ((m < 2) || (m >20))); cout cout int tmp; // переменная для временного хранения числа cout a[i][k]) // условие на сортировку < // для сортировки по убыванию достаточно заменить ">" на " for (i = 0; i < n; i++) < for (j = 0; j < m; j++) cout << setw(4) << a[i][j]; cout cout b[k][j]) < tmp = b[i][j]; b[i][j] = b[k][j]; b[k][j] = tmp; >for (i = 0; i < n; i++) < for (j = 0; j < m; j++) cout << setw(4) << b[i][j]; cout cout
Как я уже выше объяснил, метод пузырька очень неэффективный, более совершенный алгоритм ниже (вариант для сортировки по строкам):
cout a[i][k]) // условие для поиска индекса минимума minind = k; // меняю местами минимум с j-тым элементом tmp = a[i][j]; a[i][j] = a[i][minind]; a[i][minind] = tmp; > >
Этот код можно оптимизировать, если в 2 раза сократить число проходов цикла прокрутки столбцов - если в сортирующем цикле искать и минимум, и максимум, а в этом цикле минимум отправлять в начало строки (или столбца), а максимум в конец. Для сортировки массивов существует полно алгоритмов, но, насколько мне известно, самые оптимальные алгоритмы оправдывают себя только при сортировке больших массивов.
З.Ы. Код компилировал в Dev-C++ Compiler.
Сортировка двумерного массива по возрастанию - C (СИ)
В этом коде происходит сортировка двумерного массива по возрастанию. Вот список элементов кода, выделенных кавычками:
- Исходная матрица: - это комментарий, описывающий блок кода, который выводит исходную матрицу.
- array_a[i][j] = rand()%9+1; - это строка кода, которая заполняет двумерный массив случайными числами от 1 до 9.
- printf( %d , array_a[i][j]); - это строка кода, которая выводит значение элемента массива в формате строки, с пробелом после каждого значения.
- for(int k = 0; k < n; k++)< - это начало цикла, который выполняет сортировку массива.
- if(array_a[k][s] < array_a[i][j])< - это условие, которое проверяет, является ли элемент в позиции (k,s) меньше элемента в позиции (i,j).
- buf = array_a[k][s]; - это строка кода, которая сохраняет значение элемента в переменной buf перед его перемещением в позицию (i,j).
- array_a[k][s] = array_a[i][j]; - это строка кода, которая перемещает значение элемента из позиции (i,j) в позицию (k,s).
- array_a[i][j] = buf; - это строка кода, которая сохраняет значение buf в позиции (i,j).
- > - это конец условия, которое проверяет, является ли элемент в позиции (k,s) меньше элемента в позиции (i,j).
- for(int i = 0; i < n; i++)< - это начало цикла, который выводит отсортированный массив.
- printf( %d , array_a[i][j]); - это строка кода, которая выводит значение элемента массива в формате строки, с пробелом после каждого значения.
- > - это конец цикла, который выводит отсортированный массив.
- return 0; - это строка кода, которая завершает программу и возвращает 0, указывая, что программа успешно завершилась.
Как отсортировать двумерный массив в c
Помогите разобраться с сортировкой пожалуйста.
Я сделал сортировку по строкам(соответственно по столбцам тоже могу), а можно ли отсортировать массив вот по такому типу, если можно то как?:
исходная матрица:
8 6 9 4
3 9 4 7
1 7 2 9
3 7 5 1
после сортировки:
1 1 2 3
3 4 4 5
6 7 7 7
8 9 9 9
/*Сортировка двумерного массива*/ #include #include void main() < clrscr(); const int raw = 20, col = 20; int a[raw][col], i, j, n, k, tmp, m; printf("Введите размер матрицы: "); scanf("%d", &n); printf("\n"); for(i = 0; i < n; i++) < for(j = 0; j < n; j++) < printf("a[%d][%d] = ", i, j); scanf("%d", &a[i][j]); >> for(i = 0; i < n; i++) < printf("\n"); for(j = 0; j < n; j++) < printf("%d ", a[i][j]); >> for(i = 0; i a[i][k + 1]) < tmp = a[i][k]; a[i][k] = a[i][k + 1]; a[i][k + 1] = tmp; >> > for(i = 0; i < n; i++) < printf("\n"); for(j = 0; j < n; j++) < printf("%d", a[i][j]); >> getch(); >
Последний раз редактировалось savra; 25.11.2009 в 18:07 .
Как отсортировать двумерный массив n*n по первому элементу каждой строки? Нужен пример фрагмента кода программы.
Как отсортировать двумерный массив n*n по первому элементу каждой строки? Нужен пример фрагмента кода программы.
Дополнен 1 год назад
Сортировка по возрастанию.
Для каждой строки берется первый элемент и сортируются все элементы, начиная от первого элемента текущей строки. Отсортировали до конца первой строки, начиная от первого элемента (элементы рассматриваются по всей матрице). Потом, для второй строки берется первый элемент, и начиная от него сортируется все, что стоит после него.
Дополнен 1 год назад
*до конца матрицы (а не до конца строки)
Лучший ответ
Нужно внятное объяснение: что конкретно означает "отсортировать двумерный массив n*n по первому элементу каждой строки" ? Если надо отсортировать строки двумерного массива размера [n×n] по неубыванию или, наоборот, по невозрастанию его первых столбцов, то так и надо говорить. А сделать это легко, например, при помощи пузырьковой сортировки. А просто отсортировать некий числовой массив ещё легче при помощи средств стандартной библиотеки.
Остальные ответы

_____
UPD: Исправил ошибкию
Не сразу увидел что n*n. но от этого мало что поменяется в программе.