Как отсортировать 2d массив от макс до мин - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть двумерный массив с 6 строками и 2 столбцами, который необходимо отсортировать по значениям второго столбца.

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

for (int i = 1; i < 7; i++) {
    for (int j = i + 1; i < 7; i++) {
       int temp = copy[i][j];
       copy[i][j] = copy[j][i];
       copy[j][i] = temp;
    }
}

Я ожидаю, что мой код будет выглядеть так:

1.0 10.0
2.0 8.0
3.0 11.0 
4.0 12.0 
5.0 2.0
6.0 7.0 

к этому:

4.0 12.0
1.0 10.0
3.0 11.0
2.0 8.0
6.0 7.0 
5.0 2.0 

При использовании этого кода для сортировки массива я получаю только 1 значение. Как вы можете видеть выше, сортируется только второй столбец.

1 Ответ

1 голос
/ 05 апреля 2019

Зачем изобретать велосипед? Используйте qsort() из стандартной библиотеки C, вот так (общий пример для любой матрицы ROWS x COLS):

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* qsort */
#define ROWS 6
#define COLS 2

int cmp(const void* p1, const void* p2)
{
  const float* arr1 = (const float*)p1;
  const float* arr2 = (const float*)p2;
  return (arr2[1] > arr1[1]) - (arr2[1] < arr1[1]);
}

int main(void)
{
  float array[ROWS][COLS] = {
    {1.0, 10.0},
    {2.0, 8.0},
    {3.0, 11.0},
    {4.0, 12.0},
    {5.0, 2.0},
    {6.0, 7.0}
  };

  qsort(array, ROWS, COLS * sizeof(float), cmp);

  for(int i = 0 ; i < ROWS; i++)
    printf("%f, %f\n", array[i][0], array[i][1]);

  return 0;
}

Выход:

4.000000, 12.000000
3.000000, 11.000000
1.000000, 10.000000
2.000000, 8.000000
6.000000, 7.000000
5.000000, 2.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...