본문 바로가기
기초 알고리즘

여러가지 sort 방법

by leek94 2024. 11. 2.

1. String[] 문자열 배열의 비교

// 오름차순 (기본)
Arrays.sort(strings, (a, b) -> a.compareTo(b));
// 또는
Arrays.sort(strings);

// 내림차순
Arrays.sort(strings, (a, b) -> b.compareTo(a));
// 또는
Arrays.sort(strings, Collections.reverseOrder());

 

2. int[] 숫자 배열의 비교

//오름차순
Arrays.sort(arr);

그런데  int[]의 역순 정렬은 가능하지 않아 다른 여러가지 방법을 사용해야한다

int[] arr = {1, 2, 3, 4, 5};

// 1. 먼저 오름차순 정렬
Arrays.sort(arr);

// 2. 배열 뒤집기
for(int i = 0; i < arr.length/2; i++) {
    int temp = arr[i];
    arr[i] = arr[arr.length-1-i];
    arr[arr.length-1-i] = temp;
}

또는 람다식 사용

numbers = Arrays.stream(numbers)         // int[] -> IntStream
    .boxed()                             //IntStream -> Stream<Integer>
    .sorted(Collections.reverseOrder())  // 역순 정렬
    .mapToInt(Integer::intValue)         // Stream<Integer> -> IntStream
    .toArray();                          // IntStream -> int[]

 

 

 

3. 여러가지 방법으로 정렬하는 방법

import java.io.*;
import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings, (a,b) -> {
            if(a.charAt(n) == b.charAt(n)) {
                return a.compareTo(b);    // n번째 문자가 같으면 사전순 정렬
            }
            return Character.compare(a.charAt(n), b.charAt(n));    // n번째 문자로 정렬
        });
        
        return strings;
    }
}

 

 

4. 특정 타입(Wrapper)의 비교 방법

Integer.compare(x, y)    // int 비교
Long.compare(x, y)       // long 비교
Double.compare(x, y)     // double 비교
Float.compare(x, y)      // float 비교
Short.compare(x, y)      // short 비교
Byte.compare(x, y)       // byte 비교

 

Arrays.sort(arr, (a,b) -> Integer.compare(a.getAge(), b.getAge()));
Arrays.sort(arr, (a,b) -> Double.compare(a.getScore(), b.getScore()));
Arrays.sort(arr, (a,b) -> Character.compare(a.getName().charAt(0), b.getName().charAt(0)));

 

5. List 정렬

List<String> list = new ArrayList<>();

// 오름차순
list.sort(Comparator.naturalOrder());
// 또는
list.sort((a, b) -> a.compareTo(b));

// 내림차순
list.sort(Comparator.reverseOrder());
// 또는
list.sort((a, b) -> b.compareTo(a));

 

6. 객체 정렬 및 같은 값일 경우 정렬 기준 추가

class Person {
    String name;
    int age;
}

List<Person> people = new ArrayList<>();

// 이름으로 오름차순
people.sort((a, b) -> a.name.compareTo(b.name));

// 이름으로 내림차순
people.sort((a, b) -> b.name.compareTo(a.name));

// 나이로 오름차순
people.sort((a, b) -> a.age - b.age);

// 나이로 내림차순
people.sort((a, b) -> b.age - a.age);

// 나이순으로 정렬하고, 나이가 같으면 이름순
people.sort((a, b) -> {
    if(a.age == b.age) {
        return a.name.compareTo(b.name);
    }
    return a.age - b.age;
});

 

이러한 방법으로 쉽게 정렬하여 사용할  수 있다