2015-03-30 13 views
-2

У меня есть многомерный массив points[10][3], и мне нужно отсортировать его на основе третьего столбца. Как мне это сделать? Есть и другой ответ, но я нахожу их слишком продвинутыми, может кто-нибудь объяснить это мне, как вы объясните это 5-летнему?Как отсортировать многомерный двойной массив на основе третьего столбца

+0

Эта ссылка не используется для вас? http://stackoverflow.com/questions/4907683/sort-a-two-dimensional-array-based-on-one-column –

ответ

1

Вы просто хотите использовать некоторые логические подсказки.

Предположим, что это единственный синусоидный массив и работайте над ним.

//array with some temp values 
     int points[][]={{5,5,16},{5,4,9},{6,7,10},{1,4,5},{1,5,2},{1,2,3},{2,1,10},{2,1,3},{5,5,2},{5,5,1}}; 

     //Just printing my array 
     System.out.println("My Array :"); 
     for(int i=0;i<10;i++) 
      System.out.println("{"+points[i][0]+","+points[i][1]+","+points[i][2]+"}"); 

     //using bubble sort 
     for(int i=0;i<10;i++){ 
      for(int j=i+1;j<10;j++){ 
       //only checking the 3rd column 
       if(points[i][2]>points[j][2]) 
        swap(points[i],points[j]); 
      } 
     } 

     System.out.println("After sorting :"); 
     for(int i=0;i<10;i++) 
      System.out.println("{"+points[i][0]+","+points[i][1]+","+points[i][2]+"}"); 

I got the below output, 

My Array : 
{5,5,16} 
{5,4,9} 
{6,7,10} 
{1,4,5} 
{1,5,2} 
{1,2,3} 
{2,1,10} 
{2,1,3} 
{5,5,2} 
{5,5,1} 
After sorting : 
{5,5,1} 
{5,5,2} 
{1,5,2} 
{1,2,3} 
{2,1,3} 
{1,4,5} 
{5,4,9} 
{2,1,10} 
{6,7,10} 
{5,5,16} 
1

Посмотрите на этом уроке: https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html, особенно раздел 'компараторы'.

Ваша структура данных для сортировки является двумерный массив, который может также рассматриваться как массив массивов (массив, который имеет массивы в качестве элементов):

// array containing 10 int[3]-arrays: 
int[][] points = new int[10][3]; 

Если вы хотите, чтобы отсортировать 'external', ваш алгоритм сортировки должен сравнивать элементы этого массива, поэтому он должен обрабатывать элементы int[3], и мы хотим сравнить их по их последнему элементу (index = 2).

Java 7 (и ниже)

Мы можем реализовать Comparator, то есть возможность сравнить int массивы их 3-й элемент:

Comparator<int[]> comparator = new Comparator<int[]> { 
    public int compare(int[] a1, int[] a2) { 
     return Integer.compare(a1[2], a2[2]); 
    } 
} 

Теперь мы можем использовать этот компаратор каждый раз, когда мы хотим отсортировать двумерный массив следующим образом:

Arrays.sort(points, comparator); 

Java 8

Поскольку Java 8 еще проще, вам даже не нужно реализовывать Comparator. Просто используйте лямбда-выражения, чтобы определить стратегию сравнения:

Arrays.sort(points, Comparator.comparingInt(a -> a[2])); 
Смежные вопросы