c语言利用行指针传参实现二维数组的每一行按从小到大排序
时间: 2023-12-06 19:55:47 浏览: 158
用指针实现的C语言排序算法
可以使用指针数组和qsort函数来实现该功能。具体实现步骤如下:
1. 定义一个指针数组,每个元素都是指向二维数组的一行的指针。
2. 将每一行的指针存储到指针数组中。
3. 定义一个比较函数,用于比较两行数据的大小关系。
4. 使用qsort函数对指针数组进行排序,排序时使用自定义的比较函数。
5. 排序完成后,指针数组中的元素就按照从小到大的顺序排列了,即二维数组的每一行也按照从小到大的顺序排列了。
下面是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3
#define COLS 4
int cmp(const void *a, const void *b) {
int *pa = *(int **)a;
int *pb = *(int **)b;
return *pa - *pb;
}
void sort_rows(int arr[][COLS], int rows) {
int *row_ptrs[rows];
for (int i = 0; i < rows; i++) {
row_ptrs[i] = arr[i];
}
qsort(row_ptrs, rows, sizeof(int *), cmp);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < COLS; j++) {
arr[i][j] = row_ptrs[i][j];
}
}
}
int main() {
int arr[ROWS][COLS] = {{3, 2, 1, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
sort_rows(arr, ROWS);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
在该代码中,我们首先定义了一个指针数组`row_ptrs`,它的每个元素都是一个指向二维数组的一行的指针。然后,我们将每一行的指针存储到指针数组中。接着,我们定义了一个比较函数`cmp`,用于比较两行数据的大小关系。在`sort_rows`函数中,我们使用qsort函数对指针数组进行排序,排序时使用自定义的比较函数。排序完成后,我们再将排序后的指针数组中的元素复制回原来的二维数组中,这样二维数组的每一行就都按照从小到大的顺序排列了。最后,在main函数中,我们调用`sort_rows`函数对二维数组进行排序并输出结果。
阅读全文