我需要使用C或C ++对多列的双精度二维数组进行排序。有没有人能指点我应该使用哪个算法或现有库(例如boost)具有此功能?
我感觉编写递归函数可能是正确的方法,但如果已经有人实现了它,我懒得自己编写算法或实现它。:-)
谢谢
我感觉编写递归函数可能是正确的方法,但如果已经有人实现了它,我懒得自己编写算法或实现它。:-)
谢谢
你可以使用 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);
// ...
// 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);