Сортировка строк в матрице по наибольшему элементу строки - 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;
}

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


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

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

11   голосов , оценка 4.091 из 5
Похожие ответы