Сортировка строк двумерного массива

toxenok

#include<stdio.h>
main()
{
int A[3][3],i,j,c;
clrscr();
 for(i=0;i<3;i++)
   for(j=0;j<3;j++)
     scanf("%d",&A[i][j]);
for(i=0;i<3;i++)
 for(j=0;j<3;j++)
   if (A[i][0]>A[j][0])
    {
      c=A[i][0];
      A[i][0]=A[j][0];
      A[j][0]=c;
    }
for(i=0;i<3;i++)
{
 for(j=0;j<3;j++)
  {
   printf("%2d",A[i][j]);
  }
  printf("\n");
}
}
5 ответов

toxenok

вообще, смотря что нужно по заданию. А так предполагаю что ошибка с 11 строки по 15


toxenok

Нужно отсортировать строки массива, например исходный массив 5 2 9 3 6 2 4 5 2 полученный массив: 2 5 9 2 3 6 2 4 5


toxenok

#include<stdio.h>
int main()
{
int A[3][3],i,j,c,m;
for(i=0;i<3;i++)
   for(j=0;j<3;j++)
     scanf("%d",&A[i][j]);
for(i=0;i<3;i++)
 for(j=0;j<3;j++)
   for(m=0;m<2;m++) 
   if (A[i][m]>A[i][m+1])
    {
      A[i][m]^=A[i][m+1];
      A[i][m+1]^=A[i][m];
      A[i][m]^=A[i][m+1];
    }
for(i=0;i<3;i++)
{
 for(j=0;j<3;j++)
  {
   printf("%2d",A[i][j]);
  }
  printf("\n");
}
return 0;
}
И того ошибки были 1) условие сравнения 2) тебе нужен дополнительный цикл для сортировки 3) замену местами можешь переписать, я просто временную переменную не стал использовать 4)ну и при замене ты не то менял


toxenok

Эту задачу, легче решать указателями. Без указателей это будет вот так:
#include <stdio.h>
 
#define L 5                     // line
#define C 5                     // column
 
int main()
{
    int A [L][C] = {0};
    int B [C] = {0};                // clipboard
    int i, j, pass;
 
    for (i = 0; i <= L - 1; i++)
        for (j = 0; j <= C - 1; j++)
            scanf ("%2d", &A [i][j]);
 
    pass = 0;
    while (pass <= L - 1)
    {
        i = 0;
        for (i = 0; i <= L - 2; i++)
        {
            j = 0;
            if (A [i][j] > A [i + 1][j])
            {
                for (j = 0; j <= C - 1; j++) {
                    B [j] = A [i][j];
                    A [i][j] = A [i + 1][j];
                    A [i + 1][j] = B [j];
                }
            }
        }
        pass++;
    }
 
    for (i = 0; i <= L - 1; i++)
    {
        for (j = 0; j <= C - 1; j++) 
            printf ("%2d", A [i][j]);
        printf ("\n");
    }
    return 0;
}
// Sorting two-dimensional array of strings
 
#include <stdio.h>
 
#define L 5                         // line
#define C 5                         // column
 
int main()
{
    int A [L][C] = {0};
    int B [C] = {0};                // clipboard
    int i, j, pass;
 
    for (i = 0; i <= L - 1; i++)
 
        for (j = 0; j <= C - 1; j++)
            scanf ("%2d", &A [i][j]);
 
    pass = 0;
 
    while (pass <= L - 1)
    {
        i = 0;
 
        for (i = 0; i <= L - 2; i++)
        {
            j = 0;
 
            if (A [i][j] > A [i + 1][j])
            {
                for (j = 0; j <= C - 1; j++) {
                    B [j] = A [i][j];
                    A [i][j] = A [i + 1][j];
                    A [i + 1][j] = B [j];
                }
            }
        }
        pass++;
    }
 
    for (i = 0; i <= L - 1; i++)
    {
        for (j = 0; j <= C - 1; j++) 
            printf ("%2d", A [i][j]);
        printf ("\n");
    }
    return 0;
}
Прошу прощения. Переборщил с предыдущим ответом. Выше написанный код сортирует строки массива по возрастанию. Новый код сортирует каждую строку массива по возрастанию.
#include <stdio.h>
 
main()
{
    int A [3][3] = {0};
    int i, j, c, pass;
 
     for (i = 0; i < 3; i++)
       for (j = 0; j < 3; j++)
         scanf ("%d", &A [i][j]);
 
     for (pass = 0; pass < 3; pass++)
     {
        for (i = 0; i < 3; i++)
            for (j = 0; j < 2; j++)
                if (A [i][j] > A [i][j + 1]) {
                    c = A [i][j];
                    A [i][j] = A [i][j + 1];
                    A [i][j + 1] = c;
                    }
     }
 
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
            printf ("%2d", A [i][j]);
      printf("\n");
    }
    return 0;
}
Свой код я написал приближенно схожим с твоим, чтобы тебе легче было найти ошибки. 1. Для сортировки необходимо применить еще один цикл. У меня это pass, потому что те циклы, что у тебя они обслуживают сам массив а не сортировку. 2. Нельзя указывать A[i][0], конкретно [0] при использовании цикла. Цикл сам все сделает. 3. A[i][0]=A[j][0]; A [i]... = A [j]... - так нельзя. Ты поменял индексы строк на индексы столбцов. Вообщем посмотри внимательно мой код и сравни со своим. Здесь применяется пузырьковая сортировка почитай о ней в книгах. Её хоть и ругают все. Но все её знают, т.к. это азбука.


toxenok

Спасибо большое!