Java程式對二維陣列進行左對角線排序
對於給定的二維陣列,我們的任務是編寫一個 Java 程式來對其左對角線上的元素進行排序。對於此問題,我們需要以這樣一種方式排列陣列的元素,即從左上到右下(即陣列的左對角線)讀取時,值是有序的。
示例場景
Input: matrix = {3, 8, 2}, {6, 5, 4}, {3, 2, 1};
Output: new_matrix = {1, 4, 2}, {2, 3, 8}, {3, 6, 5}
使用以下排序工具來理解問題
| 4 | 9 | 8 |
| 2 | 2 | 7 |
| 6 | 5 | 5 |
二維陣列的左對角線升序排序
這裡的想法是找到對角線的長度,它是從起始點開始的剩餘行和列的最小值,並建立一個儲存對角線元素的陣列。然後,我們可以使用 Arrays.sort() 方法對該陣列進行排序,以獲取按升序排列的對角線元素。
示例
讓我們看看實際演示 -
import java.util.Arrays;
public class DgnlSortPrgrm {
public static void main(String[] args) {
int[][] twoDArr = {
{3, 8, 2},
{6, 5, 4},
{3, 2, 1}
};
System.out.println("Matrix without sorting its diagonal::");
printMatrix(twoDArr);
// calling method to sort
sorting(twoDArr);
System.out.println("Matrix after sorting its diagonal::");
printMatrix(twoDArr);
}
// method to sort diagonals
public static void sorting(int[][] twoDArr) {
int n = twoDArr.length;
int m = twoDArr[0].length;
// Sort diagonal that starts from the first row
for (int col = 0; col < m; col++) {
sortDgnlElem(twoDArr, 0, col);
}
// Sort diagonal that starts from the first column
for (int row = 1; row < n; row++) {
sortDgnlElem(twoDArr, row, 0);
}
}
// method to sort elements of the diagonal
private static void sortDgnlElem(int[][] twoDArr, int row, int col) {
int n = twoDArr.length;
int m = twoDArr[0].length;
int len = Math.min(n - row, m - col);
int[] dgnl = new int[len];
// getting diagonal elements
for (int i = 0; i < len; i++) {
dgnl[i] = twoDArr[row + i][col + i];
}
// sorting diagonal elements
Arrays.sort(dgnl);
// sorted elements of the matrix
for (int i = 0; i < len; i++) {
twoDArr[row + i][col + i] = dgnl[i];
}
}
// method to print the matrix
private static void printMatrix(int[][] matrix) {
for (int[] row : matrix) {
for (int elem : row) {
System.out.print(elem + " ");
}
System.out.println();
}
}
}
執行此程式碼後,您將獲得以下結果 -
Matrix without sorting its diagonal:: 3 8 2 6 5 4 3 2 1 Matrix after sorting its diagonal:: 1 4 2 2 3 8 3 6 5
二維陣列的左對角線降序排序
在這種方法中,我們遵循相同的邏輯,但進行了細微的更改。在這裡,我們首先對對角線的元素進行排序,然後反轉它們的順序。
示例
此 Java 程式演示瞭如何對二維陣列的左對角線進行降序排序。
import java.util.Arrays;
public class DgnlSortPrgrm {
public static void main(String[] args) {
int[][] twoDArr = {
{3, 8, 2},
{6, 5, 4},
{3, 2, 1}
};
System.out.println("Matrix without sorting its diagonal::");
printMatrix(twoDArr);
// calling method to sort
sorting(twoDArr);
System.out.println("Matrix after sorting its diagonal::");
printMatrix(twoDArr);
}
// method to sort diagonals
public static void sorting(int[][] twoDArr) {
int n = twoDArr.length;
int m = twoDArr[0].length;
// Sort diagonal that starts from the first row
for (int col = 0; col < m; col++) {
sortDgnlElem(twoDArr, 0, col);
}
// Sort diagonal that starts from the first column
for (int row = 1; row < n; row++) {
sortDgnlElem(twoDArr, row, 0);
}
}
// method to sort elements of the diagonal
private static void sortDgnlElem(int[][] twoDArr, int row, int col) {
int n = twoDArr.length;
int m = twoDArr[0].length;
int len = Math.min(n - row, m - col);
int[] dgnl = new int[len];
// getting diagonal elements
for (int i = 0; i < len; i++) {
dgnl[i] = twoDArr[row + i][col + i];
}
// sorting diagonal elements
Arrays.sort(dgnl);
// reversing the sorted array for descending order
for (int i = 0; i < len / 2; i++) {
int temp = dgnl[i];
dgnl[i] = dgnl[len - i - 1];
dgnl[len - i - 1] = temp;
}
// sorted elements of the matrix
for (int i = 0; i < len; i++) {
twoDArr[row + i][col + i] = dgnl[i];
}
}
// method to print the matrix
private static void printMatrix(int[][] matrix) {
for (int[] row : matrix) {
for (int elem : row) {
System.out.print(elem + " ");
}
System.out.println();
}
}
}
執行程式碼後,它將顯示以下輸出 -
Matrix without sorting its diagonal:: 3 8 2 6 5 4 3 2 1 Matrix after sorting its diagonal:: 5 8 2 6 3 4 3 2 1
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP