繁体   English   中英

如何在C中使用qsort()对二维数组进行排序

[英]How to sort two-dimensional array using qsort() in C

我想使用qsort()根据第一列按降序对二维数组“ d”进行排序。 但是,我希望第一列的每个元素都与第二列中同一行开头的元素匹配。

例如:

数组开头:

第一栏:{4,5,1,3,0}
第2栏:{1,2,3,4,5}

结果应该是:

第一栏:{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;
}

预先感谢您的帮助。

C不允许分配数组。 您可以创建一个指针数组,根据数组之一对指针排序,使用memcpy或循环移动行根据指针对数组重新排序(下面的链接显示了执行此操作的有效方法)。 (使用索引数组将要求compare函数仅在给定索引的情况下才能引用数组的元素。)

该线程答案的第二部分显示了指针方法。 对于qsort(),比较函数输入参数将是指向(a的第一个整数)行的指针。

使用标准库基于一个数组对两个数组进行排序(避免复制步骤)

一种替代方法是使用结构,其中每个结构都包含一个数组,因为C确实允许分配结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM