簡體   English   中英

如何對二維數組對角線元素進行排序

[英]how to sort 2d array diagonal elements

   public class DiagonalSort {
   static int sortDiagonal(int m[][]) {

     int[] intArray = new int[4];
     int k=0;

//to insert 2d array diagonal elements into 1d array
     for(int i = 0; i<m.length; i++){
         for(int j= 0; j<m[i].length; j++) {
             if(i == j) {                
                 int n = m[i][j];

                 intArray[k]=n;
                 k++; 
             }
                    }
     }

     // sorting 1d array elements
     Arrays.sort(intArray);

     // inserting sorted elements to its appropriate positions
     for(int i = 0; i<m.length; i++){
         for(int j= 0; j<m[i].length; j++) {
             if(i == j) {
                m[i][j]= intArray[i];
             } 
         }
     }


     //printing the diagonal elements
     for (int i = 0; i < m.length; i++) { 
            for (int j = 0; j < m[i].length; j++) 
                System.out.print(m[i][j] + " "); 
            System.out.println(); 
        } 
    return 0;

 }

 public static void main(String args[]) 
    { 
        int m[][] = { { 36, 10, 24, 8 }, 
                      { 12, 23, 0,  2 }, 
                      { 9,  5,  10, 2 }, 
                      { 6,  3,  1,  2 } }; 
        sortDiagonal(m); 
    } }

我使用了非常簡單的邏輯:

  • 首先將對角線元素插入一維數組
  • 對一維數組進行排序
  • 將已排序的一維數組的元素插入二維數組對角線位置

總是歡迎更有效的答案。

1.Your logic is good enough but you can optimize your code by removing some extra loops.
2.If you want to access only diagonal elements then you don't need to run 2 loops.
3.You can do like this

package test.code;
import java.util.Arrays;

public class DiagonalSort {
   static int sortDiagonal(int m[][]) {

     int[] intArray = new int[4];

//to insert 2d array diagonal elements into 1d array
     for(int i = 0; i<m.length; i++){
         intArray[i] = m[i][i];
     }

     // sorting 1d array elements
     Arrays.sort(intArray);

     // inserting sorted elements to its appropriate positions
     for(int i = 0; i<m.length; i++){
         m[i][i]= intArray[i];
     }


     //printing the diagonal elements
     for (int i = 0; i < m.length; i++) { 
            for (int j = 0; j < m[i].length; j++) 
                System.out.print(m[i][j] + " "); 
            System.out.println(); 
        } 
    return 0;

 }

 public static void main(String args[]) 
    { 
        int m[][] = { { 36, 10, 24, 8 }, 
                      { 12, 23, 0,  2 }, 
                      { 9,  5,  10, 2 }, 
                      { 6,  3,  1,  2 } }; 
        sortDiagonal(m); 
    } }
**Java class to sort diagonal element**    
    

class Solution {
            public int[][] diagonalSort(int[][] mat) {
          int row=mat.length;
        int col=mat[0].length;
        for(int i=0;i<row;i++){
    
        for(int j=0;j<col;j++){
    
        for(int r=i+1,c=j+1;r<row && c<col;r++,c++){
    
        if(mat[i][j]>mat[r][c]){
    // Swap the value
        int temp=mat[i][j];
        mat[i][j]=mat[r][c];
        mat[r][c]=temp;
                }
             }
           }
        }
        return mat;
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM