Поскольку вы хотите, чтобы ваш 2D-массив сортировался по строкам, что является порядком, в котором многомерные массивы хранятся в C, вы можете сделать вид, что это одномерный массив, и отсортировать его таким образом.
Если у вас есть функция void sort(int[], int size);
, которая берет указатель на первый элемент одномерного массива и его размер, вы можете сделать
int a[3][3] = {{4,6,1}, {3,2,9}, {5,7,8}};
sort(&a[0][0], 9);
Естественно, это работает только для истинных двумерных массивов, а не для массивов указателей, как часто динамически распределяемые двумерные массивы реализуются в C.