比较 qsort() 的二维数组
Comparing two-dimensional array for qsort()
我想用 qsort(...)
对 2D int 数组进行排序,但我的比较函数似乎是错误的。 qsort的参数如下:
qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
我的二维数组比较函数:
int compareArray2D ( const void *pa, const void *pb ) {
const int a = (const int **)pa;
const int b = (const int **)pb;
if (a[0] == b[0]) {
return a[1] - b[1];
} else {
return a[0] - b[0];
}
}
然而,使用以下函数对一维数组进行排序有效:
int compareArray (const void * a, const void * b) {
return ( *(int*)b - *(int*)a );
}
其实第一个功能出了问题,不知道怎么解决。谢谢你的提示。
你需要a和b是指针才能使用数组下标。尝试这样的事情;
int compareArray2D ( const void *pa, const void *pb ) {
const int* a = pa;
const int* b = pb;
if(a[0] == b[0]) {
return a[1] - b[1];
} else {
return a[0] - b[0];
}
}
我想用 qsort(...)
对 2D int 数组进行排序,但我的比较函数似乎是错误的。 qsort的参数如下:
qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
我的二维数组比较函数:
int compareArray2D ( const void *pa, const void *pb ) {
const int a = (const int **)pa;
const int b = (const int **)pb;
if (a[0] == b[0]) {
return a[1] - b[1];
} else {
return a[0] - b[0];
}
}
然而,使用以下函数对一维数组进行排序有效:
int compareArray (const void * a, const void * b) {
return ( *(int*)b - *(int*)a );
}
其实第一个功能出了问题,不知道怎么解决。谢谢你的提示。
你需要a和b是指针才能使用数组下标。尝试这样的事情;
int compareArray2D ( const void *pa, const void *pb ) {
const int* a = pa;
const int* b = pb;
if(a[0] == b[0]) {
return a[1] - b[1];
} else {
return a[0] - b[0];
}
}