인프런 커뮤니티 질문&답변

초보개발자님의 프로필 이미지
초보개발자

작성한 질문수

김영한의 실전 자바 - 중급 2편

정렬1 - Comparable, Comparator

해당 코드는 삽입정렬인가요?

작성

·

123

0

package collection.compare;

import java.util.Arrays;
import java.util.Comparator;

public class SortMain2 {

  public static void main(String[] args) {
    Integer[] array = {3, 2, 1};
    System.out.println(Arrays.toString(array));
    System.out.println("Comparator 비교");
    Arrays.sort(array, new AscComparator());
    System.out.println("AscComparator: " + Arrays.toString(array));
  }

  static class AscComparator implements Comparator<Integer> {


    @Override
    public int compare(Integer o1, Integer o2) {
      System.out.println("o1=" + o1 + " o2=" + o2);
      return (o1 < o2) ? -1 : ((o1 == o2) ? 0 : 1) ;
    }

  }

}

이 코드는 삽입정렬이 사용되어 배열의 첫 번째 요소가 정렬된 것으로 간주하고 시작하는게 맞을까요...?

o1=2 o2=3

o1=1 o2=2

이렇게 두 단계만 거치는 이유와 o1, o2를 잡는 기준을 잘 모르겠습니다...

답변 2

0

안녕하세요. 초보개발자님, 공식 서포터즈 OMG입니다.

AI인턴의 답변링크를 보시면, 해당 코드는 TimSort가 동작하는데요.

TimSort(=팀 정렬)은 삽입정렬과 병합정렬을 섞어 최적화 하는 정렬기법입니다 😀

image.png

파이썬에서 사용하려고 개발된 정렬인데 자바에서 사용되는게 조금은 의아하여 내용 찾아보니 바로 밑에 자바에서도 사용한다고 나와있네요 ^^

image.png

 

 

참고) https://ko.wikipedia.org/wiki/%ED%8C%80%EC%86%8C%ED%8A%B8

감사합니다.

감사합니다 AI 답변대로 내부 로직에 대해선 알 필요 없을까요...?

답변 드린 내용만 숙지해도 충분하다 생각합니다.

본 강의에서 영한님이 설명해주시는 내용이 숙지가 되었을 때, 시간적인 여유가 있다면 그 때 한 번 깊이 파보셔도 될 것 같아요.

0

안녕하세요, 인프런 AI 인턴입니다.

초보개발자님의 질문은 Arrays.sort 메소드를 사용할 때 삽입 정렬이 이용되는지, 그리고 비교하는 객체 o1과 o2가 어떻게 결정되는지에 대한 궁금증을 포함하고 있습니다.

Java의 Arrays.sort 메소드는 배열을 정렬할 때 배열의 종류(기본 타입 배열인지, 객체 배열인지)와 배열의 크기에 따라 다른 정렬 알고리즘을 사용할 수 있습니다. 일반적으로, Java 7 이상에서는 객체 배열을 정렬할 때 Dual-Pivot Quicksort 알고리즘이 적용되며, 이는 삽입정렬과는 다른 방식의 정렬입니다. 그러나 매우 작은 배열에 대해서는 삽입 정렬이나 다른 간단한 정렬 알고리즘이 사용될 수 있습니다. 정확한 내부 동작은 Java의 버전 및 구현에 따라 차이가 있을 수 있습니다.

다만, 질문에서 언급한 o1과 o2 값의 비교 순서와 이유는 정렬 과정 중 비교를 수행하는 로직에 따라 다르며, 이는 사용된 정렬 알고리즘의 내부 메커니즘으로 설명됩니다. Arrays.sort를 호출할 때 Comparator 인터페이스의 구현을 제공하면, 이 구현에 따라 요소 간 비교가 수행됩니다. 각 요소가 연속적인 비교에서 어떻게 o1, o2로 선택되는지는 정렬 로직의 내부 구현에 따라 다르며, 개발자가 직접 제어할 부분은 아닙니다.

이와 유사한 상황을 다루는 기존의 답변을 참고하면 도움이 될 수 있지만, 정확하게 질문에 맞는 답변을 찾기 어려운 경우가 많습니다. 때문에 제공된 기존 답변은 다음과 같습니다:

그러나 해당 질문이 Arrays.sort 메소드의 전반적인 내용을 다루고는 있으나, 핵심적으로 삽입 정렬의 사용 여부와 비교 기준에 대한 직접적인 해설은 부족할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

초보개발자님의 프로필 이미지
초보개발자

작성한 질문수

질문하기