Сортировка строк в матрице по наибольшему элементу строки - C (СИ)
Формулировка задачи:
Написала код сортировки строк матрицы по возрастанию максимальных элементов строк. Не пойму почему не работает сортировка в случае, например (не сортирует в матрице строки 2,2,9 и 2,2,3)
#include <stdio.h> const int M=2,N=3; void main() { int i,j,q,Mas[M][N],max_Mas; int mass[N]; // массив для обмена элементов строк for(i=0;i<M;i++) //ввод элемнтов матрицы { for(j=0;j<N;j++) { printf("[%d][%d]=",i,j); scanf("%d",&Mas[i][j]); } } for(i=0;i<M;i++) //вывод в виде матрицы { for(j=0;j<N;j++) { printf("%d\t",Mas[i][j]); } printf("\n\n"); } max_Mas=Mas[0][0]; //нахождние максимального в каждой строке for(i=0;i<M;i++) { for(q=0;q<N;q++) { if(Mas[i][j]>max_Mas) max_Mas=Mas[i][j]; } } for(i=0;i<M;i++) { for(j=0;j<M-1;j++) { printf("\n"); for(i=0;i<M-1;i++) { if(Mas[i][0] > Mas[i+1][0]) // сортировка первых элементтов строк for(j=0;j<N;j++) // цикл обмена элементами строк { mass[j]=Mas[i+1][j]; // элементы строки сохраняем в одномерном массиве mass Mas[i+1][j]=Mas[i][j]; Mas[i][j]=mass[j]; } } } printf("\nOTSORT MASSIV\n"); for(i=0;i<M;i++) // цикл вывода на печать отсортированной матриц { for(j=0;j<N;j++) { printf("%d\t",Mas[i][j]); } printf("\n"); } } }
Решение задачи: «Сортировка строк в матрице по наибольшему элементу строки»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> /* размеры матрицы */ static size_t rows = 0; static size_t cols = 0; /* оболочка для qsort */ int cmpRows(const void *a, const void *b){ return memcmp( *((void**)a), *((void**)b), cols * sizeof(int) ); } /* и ещё одна */ int cmpColumns(const void *a, const void *b){ return *((int*)a) - *((int*)b); } int main(){ int **matr; size_t i, j; /* создание */ printf("Rows in matrix: "); scanf("%i", &rows); if ( !rows ){ printf("Bad value for number of rows!\n"); exit(1); } printf("Columns in row: "); scanf("%i", &cols); if ( !cols ){ printf("Bad value for number of columns!\n"); exit(1); } if ( (matr = (int**)calloc(rows, sizeof(int*))) == NULL ){ printf("Memory error!\n"); exit(1); } for ( i = 0; i < rows; i++ ){ if ( (matr[i] = (int*)calloc(cols, sizeof(int))) == NULL ){ printf("Memory error!\n"); exit(1); } } /* заполнение */ for ( i = 0; i < rows; i++ ){ for ( j = 0; j < cols; j++ ){ printf("Matrix[%i][%i] = ", i, j); scanf("%i", &matr[i][j]); } } /* вывод */ printf("\nUnsorted:\n"); for ( i = 0; i < rows; i++ ) for ( j = 0; j < cols; j++ ) printf( ( j < cols - 1 ) ? "%02i " : "%02i\n", matr[i][j]); /* сортировка колонок */ for ( i = 0; i < rows; i++ ) qsort((void*)matr[i], cols, sizeof(int), cmpColumns); /* сортировка строк */ qsort((void *)matr, rows, sizeof(int*), cmpRows); /* и снова вывод */ printf("\nSorted:\n"); for ( i = 0; i < rows; i++ ) for ( j = 0; j < cols; j++ ) printf( ( j < cols - 1 ) ? "%02i " : "%02i\n", matr[i][j]); /* очистка памяти */ for ( i = 0; i < rows; i++ ){ free(matr[i]); matr[i] = NULL; } free(matr); matr = NULL; return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д