快速排序多维数组

时间:2015-05-10 18:09:58

标签: java recursion multidimensional-array quicksort

编辑:我希望此方法根据用户想要的任何列按升序排序(相同行中的每个数据彼此“附加”)。表中有4列。如果用户想要根据第一列进行排序,那么他应该执行类似

的操作
mySortedTable[][] = ClassName.quickSort(myUnsortedTable,0); 

正如你所看到的,我试图编写我的标题所说的代码。由于某种原因,我们的数据表被组织在一个2d字符串数组中(这不是很方便,必须来回转换才能实现ArrayList)。我使用第一个数据作为支点。介意与我一起调试它? :)

public static String[][] quickSort(String[][] data,int column) {
    //1st step, create ArrayLists needed and compare the data by the pivot to determine which ArrayList to be filled.
    ArrayList<String[]> hiData = new ArrayList<String[]>();
    ArrayList<String[]> loData = new ArrayList<String[]>();
    ArrayList<String[]> pivots = new ArrayList<String[]>();
    String[] pivot = {data[0][0],data[0][1],data[0][2],data[0][3]};
    for(String[] row : data) {
        if(row[column].compareTo(pivot[column])<0)
            loData.add(row);
        else if (row[column].compareTo(pivot[column])>0)
            hiData.add(row);
        else pivots.add(row);
    }

    //To decide whether is needed to create the array from the ArrayList for recursively sort the parted data.
    if(loData.size()>0) {
        String[][] loDataArr = new String[loData.size()][4];
        for(int i=0;i<loData.size();i++)
            loDataArr[i]=loData.get(i);
        if(loData.size()>1)
            loDataArr = quickSort(loDataArr,column);
    }
    if(hiData.size()>0) {   
        String[][] hiDataArr = new String[hiData.size()][4];
        for(int i=0;i<hiData.size();i++)
            hiDataArr[i]=hiData.get(i);
        if(hiData.size()>1)
            hiDataArr = quickSort(hiDataArr,column);
    }

    //Combine parted data into new array and return it to feed the recursive back up until the first recursive call.
    String result[][] = new String[hiData.size()+loData.size()+pivots.size()][4];
    int j=0;
    for(String[] row : loData) {
        result[j]=row;
        j++;
    }
    for(String[] row : pivots) {
        result[j]=row;
        j++;
    }
    for(String[] row : hiData) {
        result[j]=row;
        j++;
    }
    return result;
}

它输出所有数组,但没有排序,也不与它开始的数组相等。另外一个问题,我想问ArrayList<String[]>是否闻起来不好,或者是不是?

1 个答案:

答案 0 :(得分:0)

我在代码中发现了问题。我使用未排序的ArrayList而不是排序的二维数组构建了分离数据。

//Second step... 
        String[][] loDataArr = new String[loData.size()][4];
        String[][] hiDataArr = new String[hiData.size()][4];
        if(loData.size()>0) {
            for(int i=0;i<loData.size();i++)
                loDataArr[i]=loData.get(i);
            if(loData.size()>1)
                loDataArr = quickSort(loDataArr,column);
        }
        if(hiData.size()>0) {   
            for(int i=0;i<hiData.size();i++)
                hiDataArr[i]=hiData.get(i);
            if(hiData.size()>1)
                hiDataArr = quickSort(hiDataArr,column);
        }
        String result[][] = new String[hiData.size()+loData.size()+pivots.size()][4];
        int j=0;
        for(String[] row : loDataArr) {
            result[j]=row;
            j++;
        }
        for(String[] row : pivots) {
            result[j]=row;
            j++;
        }
        for(String[] row : hiDataArr) {
            result[j]=row;
            j++;
        }
        return result;
    }
相关问题