我正在尝试将此基于逻辑的代码与快速排序合并到我的主程序中(此处未显示)。该程序基本上生成二维数组值,并继续在屏幕上打印出来。dim 变量用作此代码中的维度数量(即 3D),因为存在 X、Y、Z 坐标。我无法理解这是否是使用 [dim] 对该数组进行排序的正确方法。任何建设性/有用的输入将不胜感激。
示例输出(未排序)(取自代码的最后一位以证明每一行未排序:
[[3, 1, 1, 0], [3, 1, 1, 0], [2, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0], [2, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0]]
[[4, 5, 3, 0], [4, 5, 3, 0], [2, 1, 1, 0], [4, 5, 3, 0], [4, 5, 3, 0], [4, 5, 3, 0], [4, 5, 3, 0], [2, 1, 1, 0], [4, 5, 3, 0], [4, 5, 3, 0]]
[[4, 1, 2, 0], [4, 1, 2, 0], [2, 1, 1, 0], [4, 1, 2, 0], [4, 1, 2, 0], [4, 1, 2, 0], [4, 1, 2, 0], [2, 1, 1, 0], [4, 1, 2, 0], [4, 1, 2, 0]]
实际程序
//import java.util.ArrayList;
import java.util.*;
public class MyQuickSort {
private static int a[][] = new int [10][4];
private static int dim = 3;
public static void main(String[] args) {
for(int i = 0; i < 10; i++) {
//for(int j = 0; j < 4; j++) {
a[i][0] = (int)(Math.random () * 6) +1 ;
a[i][1] = (int)(Math.random () * 6) +1 ;
a[i][2] = (int)(Math.random () * 6) +1 ;
quickSort(a, 0, a.length - 1);
System.out.println(Arrays.deepToString(a));
//}
}
}
public static void quickSort(int[][] a, int p, int r)
{
if(p<r)
{
int q=partition(a,p,r);
quickSort(a,p,q);
quickSort(a,q+1,r);
}
}
private static int partition(int[][] a, int p, int r) {
int x = a[p][dim];
int i = p-1 ;
int j = r+1 ;
while (true) {
i++;
while ( i< r && a[i][dim] < x)
i++;
j--;
while (j>p && a[j][dim] > x)
j--;
if (i < j)
swap(a, i, j);
else
return j;
}
}
private static void swap(int[][] a, int i, int j) {
// TODO Auto-generated method stub
int temp = a[i][dim];
a[i] = a[j];
a[j][dim] = temp;
}
}