c语言二维数组列排序 示例代码和更详细的解释
时间: 2024-05-01 18:18:23 浏览: 96
当我们遇到需要对二维数组的列进行排序时,可以采用转置矩阵的思想来实现。
例如,我们要对一个3行4列的二维数组arr按第2列进行排序,我们可以先将数组转置为4行3列的矩阵tran_arr,然后对tran_arr按第2行进行排序,最后再将tran_arr转置回原来的数组格式,即可得到按照第2列排序后的arr。
下面是示例代码:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 4
void print_arr(int arr[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
void sort_cols(int arr[ROWS][COLS], int col) {
int tran_arr[COLS][ROWS];
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
tran_arr[j][i] = arr[i][j];
}
}
for (int i = 0; i < COLS; i++) {
for (int j = i+1; j < COLS; j++) {
if (tran_arr[i][col] > tran_arr[j][col]) {
for (int k = 0; k < ROWS; k++) {
int temp = tran_arr[i][k];
tran_arr[i][k] = tran_arr[j][k];
tran_arr[j][k] = temp;
}
}
}
}
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
arr[i][j] = tran_arr[j][i];
}
}
}
int main() {
int arr[ROWS][COLS] = {
{5, 2, 8, 1},
{9, 4, 6, 3},
{7, 0, 2, 6}
};
printf("Original array:\n");
print_arr(arr);
sort_cols(arr, 1);
printf("Sorted array:\n");
print_arr(arr);
return 0;
}
```
这段代码可以对二维数组arr按第2列进行排序,输出结果如下:
```
Original array:
5 2 8 1
9 4 6 3
7 0 2 6
Sorted array:
2 4 0 2
0 2 4 6
6 3 1 5
```
希望这个代码可以帮助您解决问题!
阅读全文