Java - Многоуровневая сортировка двумерного массива целых чисел - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь выяснить, как сделать многоуровневую сортировку двумерного массива целых чисел в java, где первые числа имеют приоритет.

, поэтому набор данных выглядит так: -

{1,2}
{2,9}
{2,7}
{2,8}
{5,6}
{5,8}
{5,2}
{4,1}
{4,4}

Должен вернуть что-то вроде этого: -

{1,2}
{2,7}
{2,8}
{2,9}
{4,1}
{4,4}
{5,2}
{5,6}
{5,8}

Ответы [ 3 ]

0 голосов
/ 15 февраля 2020

Вот способ сделать это:

import java.util.*;

public class Test
{
     public static void main(String []args)
     {
         Integer[][] a = {
                    {1,2},
                    {2,9},
                    {2,7},
                    {2,8},
                    {5,6},
                    {5,8},
                    {5,2},
                    {4,1},
                    {4,4}
                  };

        Arrays.sort(a, new Comparator<Integer[]>()
        {
            public int compare(Integer[] a, Integer[] b)
            {
                int res = a[0].compareTo(b[0]);
                if(res!=0)
                    return res;
                return a[1].compareTo(b[1]);
            }
        });

        System.out.println(Arrays.deepToString(a));
     }
}
0 голосов
/ 15 февраля 2020

Вот решение с использованием Comparator.class

int[][] array = {{1,2},{2,9}, {2,7},{2,8},{5,6},{5,8},{5,2},{4,1},                    {4,4}};

Arrays.sort(array, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0] == o2[0]){
                    return o1[1]-o2[1];
                }else {
                    return o1[0]-o2[0];
                }
            }
        });
System.out.println(Arrays.deepToString(array));

Печатает это: [[1, 2], [2, 7], [2, 8], [2, 9], [4, 1], [4, 4], [5, 2], [5, 6], [5, 8]]

0 голосов
/ 15 февраля 2020

Как насчет этого:

for(int i = 0; i < arr.length; i++)
{
    int min = i;

    for(int j = i; j < arr.length; j++)
    {
        if(arr[min][0] > arr[j][0])
        {
            min = j;
        }
    }

    int[] temp = arr[min];
    arr[min] = arr[i];
    arr[i] = temp;
}

for(int i = 0; i < arr.length; i++)
{
    int min = i;
    for(int j = i; j < arr.length; j++)
    {
        if(arr[j][0] != arr[i][0])
        break;

        if(arr[min][1] > arr[j][1])
        min = j;
    }

    int[] temp = arr[min];
    arr[min] = arr[i];
    arr[i] = temp;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...