Перейти к содержимому

Как отсортировать двумерный массив в c

  • автор:

Как с помощью .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

Если Вам нужно, то, что на рисунке ниже, а также, нужен сам алгоритм сортировки (технология), то разбирайтесь с моим кодом.

alt text

Код сортировки методом «пузырька» — один из самых простых и самых несовершенных:

#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 (СИ)

В этом коде происходит сортировка двумерного массива по возрастанию. Вот список элементов кода, выделенных кавычками:

  1. Исходная матрица: - это комментарий, описывающий блок кода, который выводит исходную матрицу.
  2. array_a[i][j] = rand()%9+1; - это строка кода, которая заполняет двумерный массив случайными числами от 1 до 9.
  3. printf( %d , array_a[i][j]); - это строка кода, которая выводит значение элемента массива в формате строки, с пробелом после каждого значения.
  4. for(int k = 0; k < n; k++)< - это начало цикла, который выполняет сортировку массива.
  5. if(array_a[k][s] < array_a[i][j])< - это условие, которое проверяет, является ли элемент в позиции (k,s) меньше элемента в позиции (i,j).
  6. buf = array_a[k][s]; - это строка кода, которая сохраняет значение элемента в переменной buf перед его перемещением в позицию (i,j).
  7. array_a[k][s] = array_a[i][j]; - это строка кода, которая перемещает значение элемента из позиции (i,j) в позицию (k,s).
  8. array_a[i][j] = buf; - это строка кода, которая сохраняет значение buf в позиции (i,j).
  9. > - это конец условия, которое проверяет, является ли элемент в позиции (k,s) меньше элемента в позиции (i,j).
  10. for(int i = 0; i < n; i++)< - это начало цикла, который выводит отсортированный массив.
  11. printf( %d , array_a[i][j]); - это строка кода, которая выводит значение элемента массива в формате строки, с пробелом после каждого значения.
  12. > - это конец цикла, который выводит отсортированный массив.
  13. 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. но от этого мало что поменяется в программе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *