Сортировка двумерного массива по нескольким столбцам - PullRequest
4 голосов
/ 15 июня 2010

Мне нужно отсортировать двумерный массив значений типа double по нескольким столбцам, используя C или C ++. Может кто-нибудь указать мне на алгоритм, который я должен использовать, или на существующую библиотеку (возможно, повышение?), Которая имеет эту функциональность?

У меня такое ощущение, что написание рекурсивной функции может быть хорошим способом, но мне лень писать алгоритм или реализовывать его самостоятельно, если это было сделано в другом месте. : -)

Спасибо

Ответы [ 2 ]

9 голосов
/ 15 июня 2010

Вы можете использовать std::sort (C ++) или qsort (C или C ++) для выполнения операции сортировки.Сложность в том, что вам нужно определить пользовательскую функцию сравнения для сравнения ваших строк.Например:

 bool compareTwoRows(double* rowA, double* rowB){
     return ( (rowA[0]<rowB[0]) || ((rowA[0]==rowB[0])&&(rowA[1]<rowB[1])) );
 }

 // ...
 double** two_dimensional_array = // ...
 int rows = // ... number of rows ... 
 std::sort(two_dimensional_array,two_dimensional_array+rows,&compareTwoRows);
 // ...
0 голосов
/ 30 мая 2016

Я использовал следующий код:

// Order function. Change the 2 for the column number you want to use
bool compareRowsByColumn(vector<double> rowA, vector<double> rowB){
  return (rowA[2] < rowB[2]);
}

// The sorting line. Matrix is the two dimensional vector.
sort(matrix.begin(), matrix.end(), &compareRowsByColumn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...