프로그래밍/JAVA

1차 배열 2차 배열 sort(오름차순, 내림차순)

Baesj 2021. 7. 18. 20:58

1차 배열 오름차순 정렬

Arrays.sort를 사용하면 간단하게 정렬할 수 있다.

//1차원 배열 오름차순 sort
int[] nums = {9,8,1,3,2};
Arrays.sort(nums);
for(int i : nums){
    System.out.println(i);
}

결과

1 2 3 8 9

 

1차 배열 내림차순 정렬

Collections.reverseOrder()를 사용하기 위해서는 Integer 타입이여야 한다.

//1차원 배열 내림차순 sort
Integer[] nums2 = {9,8,1,3,2};
Arrays.sort(nums2, Collections.reverseOrder());
for(int i : nums2){
    System.out.println(i);
}
//1차원 배열 내림차순 sort - compare 사용
Integer[] nums4 = {9,8,1,3,2};
Arrays.sort(nums4, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
});
for(int i : nums4){
    System.out.print(i+" ");
}
//1차원 배열 내림차순 sort - compareTo 사용
Integer[] nums6 = {9,8,1,3,2};
Arrays.sort(nums6, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
});
for(int i : nums6){
    System.out.print(i+" ");
}

결과

9 8 3 2 1

 

2차 배열 오름차순 정렬

Arrays.sort에서 Comparator를 이용하면 정렬 할 수 있다.

Comparator는 함수형 인터페이스이기 때문에 람다 표현식으로 바꿔서 간단하게 작성할 수 있다.

//2차원 배열 오름차순 sort
int[][] numsArray2 = {{1,3},{1,2},{3,4},{2,2},{5,1}};
//Arrays.sort(numsArray2, 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];
//        }
//    }
//});

Arrays.sort(numsArray2, (o1, o2) -> {
    if (o1[0] == o2[0]) {
        return o1[1] - o2[1];
    } else {
        return o1[0] - o2[0];
    }
});

for(int i=0; i<numsArray2.length; i++){
    System.out.println(numsArray2[i][0] + " " + numsArray2[i][1]);
}
//2차원 배열 오름차순 sort - Integer.compare 사용
int[][] numsArray = {{1,3},{1,2},{3,4},{2,2},{5,1}};
//Arrays.sort(numsArray, new Comparator<int[]>() { //@FunctionalInterface 함수형 인터페이스이다
//    @Override
//    public int compare(int[] o1, int[] o2) {
//        if(o1[0]==o2[0]){
//            return Integer.compare(o1[1],o2[1]);
//        }else{
//            return Integer.compare(o1[0],o2[0]);
//        }
//    }
//});

Arrays.sort(numsArray, (o1, o2) -> { //람다 표현식으로 바꿀 수 있다
    if(o1[0]==o2[0]){
        return Integer.compare(o1[1],o2[1]);
    }else{
        return Integer.compare(o1[0],o2[0]);
    }
});

for(int i=0; i<numsArray.length; i++){
    System.out.println(numsArray[i][0] + " " + numsArray[i][1]);
}

결과

1 2
1 3
2 2
3 4
5 1

 

2차 배열 내림차순 정렬

오름차순 정렬 코드에서 o1과 o2의 위치만 바꾸면 된다.

//2차원 배열 내림차순 sort
//Arrays.sort(numsArray, new Comparator<int[]>() {
//    @Override
//    public int compare(int[] o1, int[] o2) {
//        if (o1[0] == o2[0]) {
//            return o2[1] - o1[1];
//        } else {
//            return o2[0] - o1[0];
//        }
//    }
//});

Arrays.sort(numsArray, (o1, o2) -> {
    if (o1[0] == o2[0]) {
        return o2[1] - o1[1];
    } else {
        return o2[0] - o1[0];
    }
});

for(int i=0; i<numsArray.length; i++){
    System.out.println(numsArray[i][0] + " " + numsArray[i][1]);
}
//2차원 배열 내림차순 sort - Integer.compare 사용
//Arrays.sort(numsArray, new Comparator<int[]>() {
//    @Override
//    public int compare(int[] o1, int[] o2) {
//        if (o1[0] == o2[0]) {
//            return Integer.compare(o2[1], o1[1]);
//        } else {
//
//            return Integer.compare(o2[0], o1[0]);
//        }
//    }
//});

Arrays.sort(numsArray, (o1, o2) -> {
    if(o1[0] == o2[0]){
        return Integer.compare(o2[1], o1[1]);
    }else{
        return Integer.compare(o2[0], o1[0]);
    }
});

for(int i=0; i<numsArray.length; i++){
    System.out.println(numsArray[i][0] + " " + numsArray[i][1]);
}

결과

5 1
3 4
2 2
1 3
1 2