从左上角到右下角排序c语言

img

img

解答如下

#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;
}