티스토리 뷰

배열 정렬

Java 에서 배열을 정렬하기 위해서는 Arrays.sort() 메서드를 사용합니다. 이 메서드를 통해 int 형 배열을 오름차순으로 정렬할 수 있습니다. 이때, 정렬된 배열은 새로 반환되는 것이 아니라, 원본 배열 자체가 정렬됩니다.

int[] arr = new int[]{34, 100, 50, 27};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); //[27, 34, 50, 100]

 

Arrays.sort() 메서드는 내부적으로 Dual-Pivot QuickSort 알고리즘을 사용하여 배열을 정렬합니다.

public static void sort(int[] a) {
        DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}

 

Arrays.sort() 메서드를 이용하여 배열의 지정된 범위 (fromIndex 부터 toIndex 전까지) 정렬할 수도 있습니다.

public static void sort(int[] a, int fromIndex, int toIndex)

 

내림차순 정렬

내림차순으로 정렬하기 위해서는 Compartor 객체를 Arrays.sort() 의 두번째 인자로 전달해야 합니다. 그러나 int 는 기본 타입 (primitive type) 이기 때문에, 이를 Integer 객체로 변환한 후 정렬해야 합니다.

public static <T> void sort(T[] a, Comparator<? super T> c) {...}
int[] arr = new int[]{34, 100, 50, 27};
Integer[] conv = Arrays.stream(arr).boxed().toArray(Integer[]::new);

Arrays.sort(conv, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
});

System.out.println(Arrays.toString(conv)); // [100, 50, 34, 27]

또는 Collections.reverseOrder() 메서드를 사용하여 내림차순 정렬을 쉽게 구현할 수 있습니다.

Arrays.sort(conv, Collections.reverseOrder());
System.out.println(Arrays.toString(conv)); //[100, 50, 34, 27]

 

객체 배열 정렬

객체 배열을 정렬하려면 Comparable 또는 Comparator 인터페이스를 구현해야 합니다.

 

Comparable 인터페이스

객체의 기본 정렬 기준(natural ordering)에 따라 정렬됩니다. Comparable을 구현하지 않은 객체는 Arrays.sort()를 사용할 수 없습니다.

public static void sort(Object[] a) {...}

 

Comparator 인터페이스

Comparable이 구현되지 않았거나, 기본 정렬 기준 외에 다른 기준으로 정렬하고자 할 때 사용됩니다. 예를 들어, 내림차순 정렬을 구현하기 위해 Comparator 객체를 두 번째 인자로 전달합니다.

public static <T> void sort(T[] a, Comparator<? super T> c) {...}

 

 

정리하자면,

1. int 형 배열은 Arrays.sort() 메서드를 사용하여 오름차순으로 정렬할 수 있습니다.
2. int 형 배열을 내림차순으로 정렬하려면, 배열을 Integer 형 배열로 변환한 후 Arrays.sort() 의 두번째 인자로 Compartor 구현체를 전달해야 합니다.
3. 객체 배열은 Comparable 인터페이스를 궇녀한 객체의 natural ordering 에 따라 정렬됩니다.
4. Comparable 이 구현되지 않았거나 다른 기준으로 정렬하고자 하는 경우, Compartor 구현체를 사용하여 정렬합니다.

정렬과 관련된 포스팅

 

[Java] 정렬(2) - Comparator과 Comparable

Comparator과 Comparable의 필요성 정렬을 하기 위해서는 '기준'이 필요하다. primitive 타입의 변수(int,double)는 통념적으로 '대소 관계'가 있어 정렬을 하는 기준이 존재한다. ex) 1 < 2 이므로 오름차순으

kangkangsulae.tistory.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함