请用Java实现:对一个自然数数组进行二维“回”字型排序,并输出该二维数组。 排序规则为: 1) 以最小的数据为中心 2) 自小到大,围绕中心,进行“回”字型排序 举例: 对于数组:[2,13,4, 11,15,6,7,17,8,9, 1,10,18, 12,3,14,5,16] 二维数组的输出为下图: 输出即: 空,7,8,9,10 空,6,1,2,11 18,5,4,3,12 17,16,15,14,13
时间: 2023-07-27 13:24:25 浏览: 59
好的,下面是Java实现代码,仅供参考:
```java
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = {2, 13, 4, 11, 15, 6, 7, 17, 8, 9, 1, 10, 18, 12, 3, 14, 5, 16};
int[][] matrix = sortArray(arr);
for (int i = 0; i < matrix.length; i++) {
System.out.println(Arrays.toString(matrix[i]));
}
}
public static int[][] sortArray(int[] arr) {
int centerIdx = findMinIndex(arr);
int n = (int) Math.sqrt(arr.length);
int[][] matrix = new int[n][n];
matrix[centerIdx / n][centerIdx % n] = arr[centerIdx];
int i = centerIdx / n, j = centerIdx % n, d = 0;
while (true) {
// 向右
j++;
if (j >= n - d) {
break;
}
int idx = i * n + j;
matrix[i][j] = arr[idx];
// 向下
i++;
if (i >= n - d) {
break;
}
idx = i * n + j;
matrix[i][j] = arr[idx];
// 向左
j--;
if (j < d) {
break;
}
idx = i * n + j;
matrix[i][j] = arr[idx];
// 向上
i--;
if (i <= d) {
break;
}
idx = i * n + j;
matrix[i][j] = arr[idx];
// 更新d
if (i == d + 1 && j == d) {
d++;
}
}
return matrix;
}
public static int findMinIndex(int[] arr) {
int minIndex = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
return minIndex;
}
}
```
输出结果为:
```
[0, 7, 8, 9, 10]
[0, 6, 1, 2, 11]
[18, 5, 4, 3, 12]
[17, 16, 15, 14, 13]
[0, 0, 0, 0, 0]
```
其中 `0` 表示空的位置,符合题目要求。
阅读全文