在c语言中二维数组排序从小到大如何排序
时间: 2024-12-12 09:28:19 浏览: 8
在C语言中,对二维数组进行排序通常涉及到两步:首先提取每个元素(二维数组中的值),然后对这些一维的元素数组进行排序。这里假设我们要对一个整数类型的二维数组按行从小到大排序,可以分为以下几个步骤:
1. 定义一个辅助函数用于比较二维数组中的单个元素。
2. 使用嵌套循环遍历二维数组,将每一行的元素复制到一个一维数组中。
3. 对这个一维数组进行排序,可以使用标准库函数`qsort()`或者自定义排序算法(如冒泡、选择、插入等)。
4. 再次遍历已排序的一维数组,将其放回原始二维数组,但按照新的顺序。
下面是一个简单的示例,使用快速排序算法对整型二维数组按行进行排序:
```c
#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于qsort()
int compare(const void *a, const void *b) {
int row_a = (*(int (*)[2]) a)[0];
int row_b = (*(int (*)[2]) b)[0];
return row_a - row_b; // 如果需要降序排序,则返回row_b - row_a;
}
void sort_2d_array(int arr[][2], int rows, int cols) {
if (rows > 0) {
int flat[] = {arr[0][0], arr[0][1]};
for (int i = 1; i < rows; i++) {
flat[i*2] = arr[i][0];
flat[i*2 + 1] = arr[i][1];
}
qsort(flat, rows * 2, sizeof(int), compare); // 排序一维数组
// 把排好序的一维数组放回二维数组
for (int i = 0, j = 0; i < rows * 2 && j < rows; i += 2, ++j) {
arr[j][0] = flat[i];
arr[j][1] = flat[i+1];
}
}
}
// 示例使用
int main() {
int arr[3][2] = {{3, 5}, {1, 4}, {2, 6}};
int rows = sizeof(arr)/sizeof(arr[0]);
int cols = sizeof(arr[0])/sizeof(arr[0][0]);
printf("Before sorting:\n");
for (int i = 0; i < rows; i++) {
printf("%d %d\n", arr[i][0], arr[i][1]);
}
sort_2d_array(arr, rows, cols);
printf("\nAfter sorting:\n");
for (int i = 0; i < rows; i++) {
printf("%d %d\n", arr[i][0], arr[i][1]);
}
return 0;
}
```
阅读全文