为什么数组没有排序?

时间:2013-11-04 22:43:04

标签: java arrays sorting constructor

我正在尝试将这个基于逻辑的代码与快速排序合并到我的主程序中(此处未显示)。该程序基本上生成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;
    }
}

1 个答案:

答案 0 :(得分:0)

由于您的所有个别数字都是非负的单位数整数,为什么不将数组元素转换为字符串 - 即[3, 1, 1, 0]作为字符串 - 并快速将它们分类?排序顺序最终会与您单独循环上述每个元素并比较数值相同。