解答如下
#include<stdio.h>
void jsort(int t[250][250],int n)
{
int j,k;
for(j=0; j<n; j++)
{
for(k=0; k<n-1-j; k++)
{
if(t[k][k]>t[k+1][k+1])
{
int tem=t[k][k];
t[k][k]=t[k+1][k+1];
t[k+1][k+1]=tem;
}
}
}
}
int main()
{
int t[250][250];
int n;
scanf("%d",&n);
int j,k;
for(j=0; j<n; j++)
{
for(k=0; k<n; k++)
{
scanf("%d",&t[j][k]);
}
}
jsort(t,n);
for(j=0; j<n; j++)
{
for(k=0; k<n; k++)
{
printf("%d ",t[j][k]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 0;
int **arr = NULL;
// 读取 n
scanf("%d", &n);
getchar();
// 分配数组空间
arr = (int **)malloc(sizeof(int*)*n);
for(int i = 0; i < n; ++i) {
arr[i] = (int*)malloc(sizeof(int)*n);
}
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
scanf("%d", &arr[i][j]);
getchar();
}
}
// 创建临时数组保存对角线数值
int *temp = (int *)malloc(sizeof(int)*n);
for(int i = 0; i < n; ++i) {
temp[i] = arr[i][i];
}
// 排序temp
for(int i = 0; i < n; ++i) {
for(int j = i+1; j < n; ++j) {
if(temp[j] < temp[i]) {
temp[i] ^= temp[j];
temp[j] ^= temp[i];
temp[i] ^= temp[j];
}
}
}
// 赋值回去
for(int i = 0; i < n; ++i) {
arr[i][i] = temp[i];
}
// 输出结果
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
// 释放资源
free(temp);
for(int i = 0; i < n; ++i) {
free(arr[i]);
}
free(arr);
return 0;
}