dream_aleaf 2023-09-07 21:35 采纳率: 28.6%
浏览 6
已结题

qSort函数 对二维数组按照最后一行进行排序

我想要将一个二维数组按照最后一行从大到小排序。然后我从网上搜到的做法是,因为求二维数组按列排序比较简单,所以我进行了转置,然后再使用qsort做法,但是为什么输出结果不正确,有人可以帮忙看一看吗?

#include <stdio.h>
#include <stdlib.h>
int b_arr[][3] = { {3, 2, 5},
                   {1, 1, 8},
                   {6, 2, 9},
                   {9, 2, 4} };
                   
int cmp2(const void* a, const void* b) // 2D Matrix
{
    return ((int *)a)[1] - ((int *)b)[1];
}

int main()
{
    printf("Hello world!\n");
    int i, j;

//    qsort(b_arr, 3, 3 * sizeof(int), cmp2);
    
    int crr[3][4];
    for (i = 0; i < 3; i++){
        for (j = 0; j < 4; j++){
            crr[i][j] = b_arr[j][i];
        }
    }

    printf("Here \n");
    for (i = 0; i < 3; i++){
        for (j = 0; j < 4; j++){
            printf("%d ", crr[i][j]);
        }
        printf("\n");
    }
    qsort(crr, 4, 4 * sizeof(int), cmp2);
    printf("After sorted: \n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 4; j++) {
            printf("%d ", crr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

  • 写回答

2条回答 默认 最新

  • 波塞冬~ 2023-09-08 08:57
    关注

    如果解决您的问题,请点赞采纳,谢谢。
    ————————————————————
    1、第34行改成qsort(crr, 3, 4 * sizeof(int), cmp2);因为你的crr数组是3*4,第二个参数表示元素的个数,也就是3个4元素的数组。
    2、第11行改成return ((int *)a)[3] - ((int )b)[3];因为你是要根据最后一个排序。
    2、输出正确之后,后面你还需要把排序好的crr变换成你要的4
    3。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月17日
  • 已采纳回答 9月9日
  • 创建了问题 9月7日