0

我正在尝试将此基于逻辑的代码与快速排序合并到我的主程序中(此处未显示)。该程序基本上生成二维数组值,并继续在屏幕上打印出来。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;
    }
}
4

1 回答 1

0

既然你所有的个人数字都是非负的个位数整数,为什么不把你的数组元素转换成字符串——也就是说,[3, 1, 1, 0]作为一个字符串——然后像那样快速排序呢?排序顺序最终将与您分别循环遍历上述每个元素并比较数值一样。

于 2013-11-04T22:51:43.657 回答