Java-сортировка 2-D массива быстро - PullRequest
1 голос
/ 17 февраля 2011

У меня есть двумерный строковый массив, состоящий из значений, таких как

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

Мне нужно отсортировать массив на основе второго элемента (двойное значение) и получить такой результат, как

{"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 ]

1 голос
/ 17 февраля 2011

Вы можете использовать Arrays.sortsort(Object[] a, Comparator c) и позволить Java позаботиться об этом. Вы можете найти эту ссылку полезной

1 голос
/ 17 февраля 2011
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]);
    }
  }
}
1 голос
/ 17 февраля 2011

Если это двумерный массив, вы можете использовать Array.sort(String[], Comparator<String[]> comparator) и передать собственный компаратор, который сравнивает 2-й элемент вложенного массива.

0 голосов
/ 17 февраля 2011

Альтернативный подход: вы можете скопировать данные в TreeMap (если все двойные значения уникальны) и разрешить карту для сортировки:

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

Итератор наборов записей теперь возвращает значения в порядке возрастания сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...