Сортировка 2D массива с ++ - PullRequest
0 голосов
/ 24 марта 2020

Я занимаюсь пузырьковой сортировкой двумерного массива, который выглядит следующим образом. Я не совсем понимаю, как сделать мое наибольшее значение равным 1 и сделать так, чтобы значение 2-й строки соответствовало аналогу 1-й строки.

Input:
13 9 1 8 5
1  2 3 4 1

Actual output:
1 5 8 9 13 
1 2 3 4 1

Это ожидаемый результат, который я пытаюсь получить.

    Output:
    5 8 9 13 1
    1 4 2 1  1

Вот мой код для сортировки карт (col = 5 и row = 2):

void sortedCards(int card[][col])
{
   int i, j, k, temp;

   printf("\n\nSorted Cards\n");

   for (k = 0; k < 10; k++)
   {
       for (i = 0; i < row - 1; i++)
       {
           for (j = 0; j < col - 1; j++)
           {
               if (card[i][j] >  card[i][j + 1])
               {
                   temp = card[i][j];
                   card[i][j] = card[i][j + 1];
                   card[i][j + 1] = temp;
               }
           }
       }
   }

   for (i = 0; i < row; i++)
   {
       if (i == 1)
       {
           printf("\n");
       }

       for (j = 0; j < col; j++)
       {
        printf("%i  ", card[i][j]);

       }
   }
}

1 Ответ

1 голос
/ 25 марта 2020

Если ваша сортировка зависит только от первой строки, нет необходимости перебирать второй ряд. Просто установите обе строки одновременно, проверяя первый ряд. Кроме того, если вы хотите, чтобы 1 обрабатывался как большее, чем все другие числа, вам нужно добавить это в логическое логическое значение c. Регулировка для l oop, как показано ниже, должна сделать это.

int j, k, temp, temp2;
for (k = 0; k < 10; k++)
{
    for (j = 0; j < col-1; j++) 
    {
        //here we only test row 0, and we check if the value is 1
        if (card[0][j] == 1 || (card[0][j] > card[0][j+1] && card[0][j+1] != 1))
        {
            //all other reassignment is the same but you do both rows at the same time
            temp = card[0][j];
            temp2 = card[1][j];

            card[0][j] = card[0][j + 1];
            card[1][j] = card[1][j + 1];

            card[0][j + 1] = temp;
            card[1][j + 1] = temp2;
        }
    }
}
...