[アルゴリズムの説明]反時計新しいマトリクス状に配置された昇順行列要素を

タイトル

N * Nの行列入力、マトリックスソート反時計回りに出力します。

問題の解決策

暫定一次元アレイがソートさで、次いでマトリックス左右の角を制御する、円は新しいマトリックスを書き込みます。

コード


import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int N=in.nextInt();
        int[][] m=new int[N][N];
        for(int i=0;i<N;++i) {
            for(int j=0;j<N;++j) {
                m[i][j]=in.nextInt();
            }
        }
        int[][] sortM=new int[N][N];
        sortM=dealMatrix(m);
        for(int i=0;i<N;++i) {
            for(int j=0;j<N;++j) {
                System.out.print(sortM[i][j]);
            }
            System.out.println("\n");
        }
    }
    
    public static int[][] dealMatrix(int[][] m){
        if(m==null||m.length!=m[0].length) {
            return null;
        }
        
        int N=m.length;
        int[] sortArr=new int[N*N];
        int pos=0;
        for(int i=0;i<N;++i) {
            for(int j=0;j<N;++j) {
                sortArr[pos++]=m[i][j];
            }
        }
        
        Arrays.sort(sortArr);
        
        int lRow=0;
        int lCol=0;
        int rRow=N-1;
        int rCol=N-1;
        int[][] sortM=new int[N][N];
        int arrPos=0;
        while(lRow<=rRow&&lCol<=rCol) {//
            arrPos=writeSortM(sortM,lRow++,lCol++,rRow--,rCol--,sortArr,arrPos);
        }
        return sortM;
    }
    
    private static int writeSortM(int[][] sortM,int lRow,int lCol,int rRow,int rCol,int[] sortArr,int arrPos) {
        if(lRow==rRow&&lCol==rCol) {
            sortM[lRow][lCol]=sortArr[arrPos++];
            return arrPos;
        }
        
        int i=lRow;//
        int j=lCol;//
        while(i<rRow) {//
            sortM[i++][j]=sortArr[arrPos++];
        }
        while(j<rCol) {
            sortM[i][j++]=sortArr[arrPos++];
                    
        }
        while(i>lRow) {
            sortM[i--][j]=sortArr[arrPos++];
        }
        while(j>lCol){
            sortM[i][j--]=sortArr[arrPos++];
        }
        return arrPos;
    }
    
}

おすすめ

転載: www.cnblogs.com/coding-gaga/p/11210839.html