我正在尝试将这个基于逻辑的代码与快速排序合并到我的主程序中(此处未显示)。该程序基本上生成2d数组值,并继续在屏幕上打印出来。 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;
}
}
答案 0 :(得分:0)
由于您的所有个别数字都是非负的单位数整数,为什么不将数组元素转换为字符串 - 即[3, 1, 1, 0]
作为字符串 - 并快速将它们分类?排序顺序最终会与您单独循环上述每个元素并比较数值相同。