该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先按行排序,再按列排序
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
const int MAX = 10;
typedef struct cell {
int val;
bool fl;
}cell;
void get_row_fl(cell** matrix, int m, int row_pos, int* val) {
for (int i = 0; i < m; i++) {
if (matrix[row_pos][i].fl == 1) {
*val = matrix[row_pos][i].val;
break;
}
}
}
void get_col_fl(cell** matrix, int m, int col_pos, int* val) {
for (int i = 0; i < m; i++) {
if (matrix[i][col_pos].fl == 1) {
*val = matrix[i][col_pos].val;
break;
}
}
}
void swap_row(cell** matrix, int m, int row1, int row2) {
cell tmp[MAX];
for (int i = 0; i < m; i++) {
tmp[i].fl = matrix[row1][i].fl;
tmp[i].val = matrix[row1][i].val;
}
for (int i = 0; i < m; i++) {
matrix[row1][i].fl = matrix[row2][i].fl;
matrix[row1][i].val = matrix[row2][i].val;
}
for (int i = 0; i < m; i++) {
matrix[row2][i].fl = tmp[i].fl;
matrix[row2][i].val = tmp[i].val;
}
}
void swap_col(cell** matrix, int m, int col1, int col2) {
cell tmp[MAX];
for (int i = 0; i < m; i++) {
tmp[i].fl = matrix[i][col1].fl;
tmp[i].val = matrix[i][col1].val;
}
for (int i = 0; i < m; i++) {
matrix[i][col1].fl = matrix[i][col2].fl;
matrix[i][col1].val = matrix[i][col2].val;
}
for (int i = 0; i < m; i++) {
matrix[i][col2].fl = tmp[i].fl;
matrix[i][col2].val = tmp[i].val;
}
}
void sort(cell** matrix, int m) {
for (int i = 0; i < m; i++) {
matrix[i][i].fl = 1;
}
int val1, val2;
for (int i = m - 1; i >= 0; i--) {
for (int j = 0; j < i - 1; j++) {
get_row_fl(matrix, m, j, &val1);
get_row_fl(matrix, m, j + 1, &val2);
if (val1 > val2) {
swap_row(matrix, m, j, j + 1);
}
}
}
for (int i = m - 1; i >= 0; i--) {
for (int j = 0; j < i - 1; j++) {
get_col_fl(matrix, m, j, &val1);
get_col_fl(matrix, m, j + 1, &val2);
if (val1 > val2) {
swap_col(matrix, m, j, j + 1);
}
}
}
}
int A[6][6] = { 6,2,4,8,14,22,\
2,1,6,10,16,24,\
4,6,3,12,18,26,\
8,10,12,2,20,28,\
14,16,18,20,5,30,\
22,24,26,28,30,8 };
int B[6][6] = { \
1,10,6,16,2,24,\
10,2,12,20,8,28,\
6,12,3,18,4,26,\
16,20,18,5,14,30,\
2,8,4,14,6,22,\
24,28,26,30,22,8\
};
int main() {
int m = 6;
cell** matrix = (cell**)malloc(sizeof(cell*) * MAX);
if (matrix == NULL) exit(1);
for (int i = 0; i < m; i++) {
matrix[i] = (cell*)malloc(sizeof(cell) * MAX);
if (matrix[i] == NULL) exit(1);
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
matrix[i][j].fl = 0;
matrix[i][j].val = A[i][j];
}
}
sort((cell**)matrix, m);
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
printf("%d\t", matrix[i][j].val);
}
printf("\n");
}
printf("----\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
printf("%d\t", B[i][j]);
}
printf("\n");
}
return 0;
}