【发布时间】:2015-07-21 04:52:06
【问题描述】:
编辑:我希望此方法根据用户想要的任何列按升序排序(同一行中的每个数据都“附加”到彼此)。表中有 4 列。如果用户想根据第一列进行排序,那么他应该这样做
mySortedTable[][] = ClassName.quickSort(myUnsortedTable,0);
如您所见,我尝试编写标题所说的内容。由于某种原因,我们的数据表被组织在一个二维字符串数组中(这并不方便,必须来回转换才能实现 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[]> 是否闻起来不难闻,或者是吗?
【问题讨论】:
-
你想怎么排序?好像它是一个长阵列?每列排序?每一行都排序了吗?
-
已编辑以回答您的问题。谢谢你:)
-
有什么理由要自己实现而不是使用现有的工具,如
Arrays.sort()? -
@RealSkeptic 它只对单个数组进行排序,不是吗?我的数据表是二维的。每一行都是一个结构(抽象地)。 data[row][0] 中的字符串“连接”到 data[row][1]、data[row][2]、data[row][3]。如果你对其中一个进行排序,你也必须相应地放置他们的朋友。
标签: java recursion multidimensional-array quicksort