Сортировка строк матрицы по неубыванию наибольших элементов - C (СИ)
Формулировка задачи:
Доброго времени суток, помогите, кто осилит, вопрос таков, дана вещественная матрица NнаM, упорядочить ее строки по неубыванию их наибольших элементов
То есть матрица (размерность введена с клавиатуры)
3.123 5.235 6.346
1.363 6.234 8.678
0.762 4.727 2.286
Нужно найти наибольший элемент в каждой строке
И расположить строки по убыванию этих элементов
0.762 4.727 2.286
3.123 5.235 6.346
1.363 6.234 8.678
Выручайте, товарищи, скитаюсь над поиском инфы для задания 3-ий день, и ничего в голову не лезет, как реализовать сей алгоритм, двумерный массив я задал и повис – не могу сойти с этой мертвой точки, работаю с visual studio 2010 языком С, подскажите
/ напишите как реализовать, сдать нужно на завтра, использовать векторы, библиотеку <iostream> запрещено
Решение задачи: «Сортировка строк матрицы по неубыванию наибольших элементов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> typedef double ITEMTYPE; /// @return 0 if failed, else 1 int create(ITEMTYPE *** arr, int n, int m) { int fail = 0; int i; *arr = (ITEMTYPE **)calloc(n, sizeof(ITEMTYPE *)); if (*arr == NULL) return 0; for (i=0; i<n; ++i) { (*arr)[i] = (ITEMTYPE*)calloc(m, sizeof(ITEMTYPE)); if ((*arr)[i] == NULL) { fail = 1; break; } } if (fail != 0) { while (i>0) free((*arr)[i]); free(*arr); *arr = NULL; return 0; } return 1; } void destroy(ITEMTYPE ** *arr, int n, int m) { while(n>0) { --n; free((*arr)[n]); } free(*arr); *arr = NULL; } void generate(ITEMTYPE ** arr, int n, int m, int max) { int col; col = m; while(n>0) { --n; m = col; while(m>0) { --m; arr[n][m] = (ITEMTYPE)(((double)rand())/((double)RAND_MAX)*((double)max)); } } } void print(ITEMTYPE ** arr, int n, int m) { int row = 0; int col = 0; while(row < n) { col = 0; while(col < m) { printf("%5.2f ", arr[row][col]); ++col; } ++row; fputc('\n', stdout); } } ITEMTYPE maxofrow(ITEMTYPE *row, int sz) { ITEMTYPE max; max = row[sz-1]; while(sz > 0) { --sz; if(row[sz] > max) max = row[sz]; } return max; } int sort(ITEMTYPE ** arr, int n, int m) { int imin, i, j; ITEMTYPE* maximum; ITEMTYPE* tmprow; ITEMTYPE tmp; maximum = (ITEMTYPE*)calloc(n, sizeof(ITEMTYPE)); if (maximum == NULL) { return 0; } for(i = 0; i<n; ++i) maximum[i] = maxofrow(arr[i], m); for(i = 0; i<n-1; ++i) { imin = i; for(j=i+1; j<n; ++j) if(maximum[j] < maximum[imin]) imin = j; if(imin != i) { tmp = maximum[i]; maximum[i] = maximum[imin]; maximum[imin] = tmp; tmprow = arr[i]; arr[i] = arr[imin]; arr[imin] = tmprow; } } free(maximum); return 1; } int main() { ITEMTYPE ** matrix; int n,m; int exitcode = EXIT_SUCCESS; do { fputs("enter n(>0): ", stdout); scanf("%d", &n); fputs("enter m(>0): ", stdout); scanf("%d", &m); } while((n <= 0) || (m <= 0)); if(create(&matrix, n, m) == 0) { fputs("create failed : no memory\n", stderr); return 1; } generate(matrix, n, m, 100); fputs("generated matrix:\n", stdout); print(matrix, n, m); if(sort(matrix, n, m) == 0) { fputs("sort filed : no memory\n", stderr); exitcode = EXIT_FAILURE; } else { fputs("sorted matrix:\n", stdout); print(matrix, n, m); } destroy(&matrix, n, m); return exitcode; }
Объяснение кода листинга программы
В данном коде реализована сортировка строк матрицы по неубыванию наибольших элементов.
- Создание матрицы:
- Объявляется тип данных ITEMTYPE, который будет использоваться для хранения значений элементов матрицы.
- Определяется функция create, которая создает матрицу заданного размера и заполняет ее значениями.
- Если выделение памяти под матрицу не удалось (например, из-за нехватки памяти), то код возвращает 0 и выводит сообщение об ошибке.
- В основной функции main, после ввода размеров матрицы, вызывается функция create для создания матрицы.
- Если создание матрицы не удалось, то код выводит сообщение об ошибке и завершает работу с кодом возврата 1.
- Если создание матрицы успешно, то происходит генерация случайных значений элементов матрицы.
- Генерация матрицы:
- Определяется функция generate, которая генерирует случайные значения элементов матрицы.
- В основной функции main, после создания матрицы, вызывается функция generate для заполнения матрицы случайными значениями.
- Вывод матрицы:
- Определяется функция print, которая выводит матрицу на экран.
- В основной функции main, после генерации матрицы, вызывается функция print для вывода матрицы на экран.
- Сортировка матрицы:
- Определяется функция sort, которая сортирует строки матрицы по неубыванию наибольших элементов.
- В основной функции main, после вывода сгенерированной матрицы, вызывается функция sort для сортировки матрицы.
- Если сортировка матрицы не удалась (например, из-за нехватки памяти), то код выводит сообщение об ошибке и изменяет код возврата на EXIT_FAILURE.
- В противном случае, после сортировки, выводится отсортированная матрица.
- Уничтожение матрицы:
- Определяется функция destroy, которая освобождает память, выделенную под матрицу.
- В основной функции main, после сортировки матрицы, вызывается функция destroy для освобождения памяти под матрицей.
- Ввод размеров матрицы и завершение работы программы:
- В основной функции main, после вывода отсортированной матрицы, программа завершается с кодом возврата EXIT_SUCCESS.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д