📜  门| GATE-CS-2016(套装2)|第 38 题(1)

📅  最后修改于: 2023-12-03 15:28:45.010000             🧑  作者: Mango

GATE-CS-2016(套装2)|第 38 题

这是一道关于C语言指针的练习题,要求对于一个给定的二维数组,实现其中每行元素的升序排列。

问题描述

给定一个二维数组arr,其中每一行均为升序排列,现在要求对于该数组中的每行,按照升序排列重新排序。

解法思路

由于每一行均为升序排列,因此我们可以通过指针直接对数组进行排序。对于一个二维数组,我们需要处理其中的每一行,因此需要对二维数组进行迭代。具体地,我们可以使用两层循环对每一行进行遍历,并利用qsort函数来完成排序操作。qsort函数需要指定待排序数组的指针、数组中元素的个数、元素的大小以及比较函数。排序完成后,我们可以使用printf函数遍历输出每一行。下面给出该问题的C语言实现代码:

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b) {
    return *(const int*)a - *(const int*)b;
}

int main() {
    int arr[3][3] = {{3, 6, 8}, {1, 2, 4}, {0, 5, 7}};
    int i, j;
    for(i = 0; i < 3; i++) {
        qsort(arr[i], 3, sizeof(int), cmp);
        for(j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}
运行结果

程序输出的结果如下:

3 6 8
1 2 4
0 5 7
结论

该问题旨在考察对于C语言指针以及数组的掌握程度,为理解指针和数组的基础知识打下良好基础。此外,通过本题的练习还能熟悉qsort函数的使用和定义比较函数的方法。