二维数组根据某一列进行排序
时间: 2024-10-09 11:10:38 浏览: 64
二维数组,选择排序和冒泡排序
在C语言中,对二维数组(如`int a[n][m]`)按照某一列进行排序通常涉及到两步:首先提取那一列的元素形成一维数组,然后对这个一维数组进行排序,最后再将排序后的结果回填到二维数组对应的位置上。
这里我们可以使用嵌套循环来提取指定列的元素,并使用标准库函数`qsort()`来进行排序。假设我们要根据第`column_index`列进行升序排序,以下是一个示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 假设column_index从0开始,所以实际索引比用户给定的少1
#define COL_INDEX(column) (column - 1)
void sort_column(int a[][m], int n, int column, int m) {
// 提取指定列的元素并复制到临时一维数组
int temp[n];
for (int i = 0; i < n; i++) {
temp[i] = a[i][COL_INDEX(column)];
}
// 对一维数组进行排序
qsort(temp, n, sizeof(int), compare);
// 将排序后的一维数组放回到二维数组对应位置
for (int i = 0; i < n; i++) {
a[i][COL_INDEX(column)] = temp[i];
}
}
// 比较函数,用于qsort,这里假设是升序
int compare(const void* a, const void* b) {
return (*(const int*)a - *(const int*)b);
}
// 示例用法
int main() {
int arr[5][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}};
int n = sizeof(arr) / sizeof(arr[0]);
int m = sizeof(arr[0]) / sizeof(arr[0][0]);
int column = 1; // 根据第二列(索引为1)进行排序
printf("Before sorting:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
sort_column(arr, n, column, m);
printf("After sorting by column %d:\n", column);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个例子中,我们定义了一个比较函数`compare()`,它是`qsort()`所需的,用于确定如何排序。你可以根据需求修改这个比较函数来达到降序或其他自定义排序要求。
阅读全文