Упорядочить строки матрицы в порядке возрастания их последних элементов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана матрица А размера n m. Упорядочить строки матрицы в порядке возрастания их последних элементов. помогите :с

Решение задачи: «Упорядочить строки матрицы в порядке возрастания их последних элементов»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N  10
  4. #define M  5
  5. static void m_qsort(int m[][M], int l, int r, int col);
  6. void sort_matrix(int m[][M], int col);
  7.  
  8. int main(void){
  9.     int i, j, m[N][M];
  10.     for(i = 0; i < N; ++i){
  11.         for(j = 0; j < M; ++j){
  12.             m[i][j] = rand() % 10;
  13.             printf("%d ", m[i][j]);
  14.         }
  15.         putchar('\n');
  16.     }
  17.     putchar('\n');
  18.  
  19.     //сортируем по последнему столбцу
  20.     sort_matrix(m, M - 1);
  21.     for(i = 0; i < N; ++i){
  22.         for(j = 0; j < M; ++j)
  23.             printf("%d ", m[i][j]);
  24.         putchar('\n');
  25.     }
  26.     return 0;
  27. }
  28.  
  29. //сортировка строк матрицы по указанному столбцу
  30. void sort_matrix(int m[][M], int col){
  31.     m_qsort(m, 0, N - 1, col);
  32. }
  33.  
  34. //быстрая сортировка   
  35. static void m_qsort(int m[][M], int l, int r, int col){
  36.     int t, k, p, i = l, j = r; 
  37.     if(l >= r)
  38.         return;
  39.    
  40.     p = m[l + (r - l) / 2][col];
  41.     while(i <= j){
  42.         while(m[i][col] < p)
  43.             ++i;
  44.         while(m[j][col] > p)
  45.             --j;
  46.  
  47.         if(i <= j){
  48.             for(k = 0; k < M; ++k){
  49.                 t       = m[i][k];
  50.                 m[i][k] = m[j][k];
  51.                 m[j][k] = t;
  52.             }
  53.             ++i;
  54.             --j;
  55.         }
  56.     }
  57.  
  58.     if(j > l)
  59.         m_qsort(m, l, j, col);
  60.     if(r > i)
  61.         m_qsort(m, i, r, col);
  62. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы и .
  2. Определяем макросы N и M, которые задают размеры матрицы.
  3. Объявляем функцию m_qsort как статическую, которая будет использоваться только внутри данной трансляции.
  4. Определяем функцию sort_matrix, которая будет вызывать функцию m_qsort для сортировки матрицы по указанному столбцу.
  5. Создаем массив m[N][M] и инициализируем его случайными значениями с помощью функции rand() % 10.
  6. Выводим исходную матрицу на экран.
  7. Вызываем функцию sort_matrix, передавая в нее массив m и номер столбца M-1 для сортировки по последнему столбцу.
  8. Выводим отсортированную матрицу на экран.
  9. Возвращаем 0, чтобы указать, что программа успешно завершилась.
  10. Определяем функцию m_qsort, которая реализует алгоритм быстрой сортировки для сортировки строк матрицы по указанному столбцу.
  11. Рекурсивно вызываем функцию m_qsort для сортировки подмассивов, если длина подмассива меньше или равна 1.
  12. Вычисляем опорный элемент p, как значение элемента из среднего подмассива.
  13. Используем цикл while для определения индексов i и j, которые делят массив на две части относительно опорного элемента p.
  14. Используем цикл while для перебора элементов в левой и правой частях матрицы и обмена их местами, если они находятся не на своих местах относительно опорного элемента p.
  15. Если i <= j, то выполняем обмен значениями элементов в текущих позициях i и j.
  16. Если i <= j, то выполняем рекурсивный вызов функции m_qsort для сортировки левой и правой частей матрицы.
  17. Если j > l, то выполняем рекурсивный вызов функции m_qsort для сортировки левой части матрицы.
  18. Если r > i, то выполняем рекурсивный вызов функции m_qsort для сортировки правой части матрицы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы