Java-快速排序二维数组

时间:2011-02-17 09:08:31

标签: java sorting multidimensional-array

我有一个由字符串组成的二维字符串数组,如

{ "Home","0.1256784"  
 "Contact","-0.56789"  
 "Refer","1.36589"  
 "Next","3.678456" }

我必须根据第二个元素(double值)对数组进行排序,并获得类似

的结果
{"Contact","-0.56789"  
 "Home","0.1256784"  
 "Refer","1.36589"  
 "Next","3.678456" }  

我已经使用了一些冒泡排序代码对它进行排序并且它可以正常工作,但是我必须知道如何以更快的方式使排序比我的排序更有效。我尝试了之前发布的与我的相关问题的代码但我无法完成任务。
我的代码:

String tt="",tk="";
for(int i=1;i<myarray.length;i++)
 {  
for(int j=1;j<myarray.length-1;j++)
       {
       if(Double.parseDouble(myarray[i][1])<Double.parseDouble(myarray[j][1]))
            {
                    tk=myarray[i][1];  
                    tt=myarray[i][0];  
                    myarray[i][1]=myarray[j][1];  
                    myarray[i][0]=myarray[j][0];  
                    myarray[j][1]=myarray;  
                    myarray[j][0]=myarray;  


            }
          }
        }

4 个答案:

答案 0 :(得分:1)

如果它是一个二维数组,你可以使用Array.sort(String[], Comparator<String[]> comparator)并传递一个自定义比较器,它比较子数组的第二个元素。

答案 1 :(得分:1)

您可以使用Arrays.sortsort(Object[] a, Comparator c)让java来处理它。您可能会发现此link有用

答案 2 :(得分:1)

public class Sort2D {
  public static void main(String args[]) {
    String ss[][] = { 
      {"Home", "0.1256784"},
      {"Contact", "-0.56789"},
      {"Refer", "1.36589"},
      {"Next", "3.678456"}
    };
    Arrays.sort(ss, new Comparator<String[]>() {
      public int compare(String[] s1, String[] s2) {
        double d1 = Double.parseDouble(s1[1]);
        double d2 = Double.parseDouble(s2[1]);
        return Double.compare(d1, d2);
      }
    });
    for (String[] s : ss) {
      System.out.println(s[0] + ": " + s[1]);
    }
  }
}

答案 3 :(得分:0)

替代方法:您可以将数据复制到TreeMap(如果所有双值都是唯一的),并让地图进行排序:

Map<Double, String> map = new TreeMap<Double, String>();
for (String[] row:myArray) {
   map.put(Double.parseDouble(row[1]), row[1]);

条目集迭代器现在以升序排序顺序返回值。