views:

92

answers:

1

I need to sort a 2 dimensional array of doubles on multiple columns using either C or C++. Could someone point me to the algorithm that I should use or an existing library (perhaps boost?) that has this functionality?

I have a feeling that writing a recursive function may be the way to go but I am too lazy to write out the algorithm or implement it myself if it has been done elsewhere. :-)

Thanks

+6  A: 

You can use std::sort (C++) or qsort (C or C++) to perform the sorting operation. The tricky part is that you need to define a custom comparison function for comparing your rows. For example:

 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);
 // ...
Michael Aaron Safyan
That should work. I knew about qsort and std::sort but never thought to extend the compare function to more than 1 column.I will implement it and will accept your answer if it works for me. Thanks for your quick reply.
Anon
You could also use std::stable_sort - just sort the array repeatedly, starting with the _least_ significant column.
Nick Johnson