我想使用qsort()根据第一列按降序对整数“ d”的二维数组进行排序。但是,我希望第一列的每个元素都与第二列中同一行开头的元素相匹配。
例如:
开头的数组:
列1:{4,5,1,3,0}
列2:{1,2,3,4,5}
,结果应为:
列1:{5,4,3,1,0}
列2:{2,1,4,3,5}
我已经编写了用于对一维数组进行排序的代码,但是我不知道如何对二维数组进行排序。
int main(){
FILE *file_in, *file_out;
file_in=fopen("file.in", "r");
fscanf(file_in, "%d", &N);
for( i = 1; i <= N; i = i + 1 ){
fscanf(file_in, "%d", &a);
fscanf(file_in, "%d", &b);
fscanf(file_in, "%d", &c);
d[i][1] = a+b+c;
d[i][2] = a*b*c
}
fclose(file_in);
int cmpfunc (const void * a, const void * b) {
return ( *(int*)b - *(int*)a );
}
qsort(d, N, sizeof(int), cmpfunc);
file_out=fopen("file.out","w");
fprintf(file_out, "%d", M);
for ( i=1; i<=N; i = i + 1){
fprintf(file_out, "%d", d);
}
fclose(file_out);
return 0;
}
预先感谢您的帮助。
答案 0 :(得分:2)
C不允许分配数组。您可以创建一个指针数组,根据数组之一对指针排序,使用memcpy或循环移动行根据指针对数组重新排序(下面的链接显示了执行此操作的有效方法)。 (使用索引数组将要求compare函数仅在给定索引的情况下才能引用数组的元素。)
该线程答案的第二部分显示了指针方法。对于qsort(),比较函数的输入参数将是指向(a的第一个整数)行的指针。
Sorting two arrays based on one with standard library (copy steps avoided)
一种替代方法是使用结构,其中每个结构都包含一个数组,因为C确实允许分配结构。