【发布时间】:2018-10-09 14:22:45
【问题描述】:
我有一个 n*2 大小的数组。我想根据它们在第二列的值使用 qsort 对它们进行排序。
#include<stdio.h>
int cmp(const int **a, const int **b) {
//return 0;
//return *a[1] - *b[1]
// return *a - *b;
}
int main()
{
int t; // test cases
scanf("%d", &t);
for(int i=0; i<t; i++) {
int n;
scanf("%d", &n); // size of array
int **arr = (int **)malloc(n * sizeof(int *));
for(int j =0; j< n; j++) {
arr[j] = (int *) malloc(2*sizeof(int));
}
for(int j =0; j< 2; j++) {
for(int k =0; k< n; k++) {
scanf("%d", &arr[k][j]);
}
}
for(int k =0; k< n; k++) {
for(int j =0; j<= 1; j++) {
printf("%d\t", arr[k][j]);
}
printf("\n");
}
// qsort(arr, n, sizeof(arr[0]), cmp);
}
return 0;
}
所以对于输入,
1 2
3 6
0 8
5 4
8 9
5 7
输出是,
1 2
5 4
3 6
5 7
0 8
8 9
我尝试过,但无法根据它们的第 2 列对它们进行排序。我对将数组元素传递给比较器感到困惑。还有什么作为元素的大小传递?但我猜下面的前两个是正确的。
qsort(arr, n, sizeof(arr[0]), cmp);
//qsort(arr, n, sizeof((int *)), cmp);
//qsort(arr, n, 2 * sizeof((int)), cmp);
我尝试了比较器的各种组合。
请指路或者解释一下。
【问题讨论】:
-
我的输出和你完全不同。
-
@Stargateur。我根本没有任何输出,我只是打印了输入。我还没有对数组进行排序以获得输出。我只需要比较器功能的帮助。
-
我不明白为什么有人反对它,一个理由会很好。并不是我没有尝试或做过一些研究。
-
我没有否决你的问题,但也许我应该说你声称你的程序的输出是错误的,并且不清楚你试图用你的代码做什么。即使在文档中,也已经有大量问题显示了 qsort 的使用示例!
-
"传递什么作为元素的大小?" 提示:在 C 中,二维数组实际上是一维数组的一维数组。
标签: c arrays sorting comparator qsort