해당 코드는 삽입정렬인가요?
245
작성한 질문수 51
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(=팀 정렬)은 삽입정렬과 병합정렬을 섞어 최적화 하는 정렬기법입니다 😀

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

참고) https://ko.wikipedia.org/wiki/%ED%8C%80%EC%86%8C%ED%8A%B8
감사합니다.
0
답변 드린 내용만 숙지해도 충분하다 생각합니다.
본 강의에서 영한님이 설명해주시는 내용이 숙지가 되었을 때, 시간적인 여유가 있다면 그 때 한 번 깊이 파보셔도 될 것 같아요.
0
안녕하세요, 인프런 AI 인턴입니다.
초보개발자님의 질문은 Arrays.sort 메소드를 사용할 때 삽입 정렬이 이용되는지, 그리고 비교하는 객체 o1과 o2가 어떻게 결정되는지에 대한 궁금증을 포함하고 있습니다.
Java의 Arrays.sort 메소드는 배열을 정렬할 때 배열의 종류(기본 타입 배열인지, 객체 배열인지)와 배열의 크기에 따라 다른 정렬 알고리즘을 사용할 수 있습니다. 일반적으로, Java 7 이상에서는 객체 배열을 정렬할 때 Dual-Pivot Quicksort 알고리즘이 적용되며, 이는 삽입정렬과는 다른 방식의 정렬입니다. 그러나 매우 작은 배열에 대해서는 삽입 정렬이나 다른 간단한 정렬 알고리즘이 사용될 수 있습니다. 정확한 내부 동작은 Java의 버전 및 구현에 따라 차이가 있을 수 있습니다.
다만, 질문에서 언급한 o1과 o2 값의 비교 순서와 이유는 정렬 과정 중 비교를 수행하는 로직에 따라 다르며, 이는 사용된 정렬 알고리즘의 내부 메커니즘으로 설명됩니다. Arrays.sort를 호출할 때 Comparator 인터페이스의 구현을 제공하면, 이 구현에 따라 요소 간 비교가 수행됩니다. 각 요소가 연속적인 비교에서 어떻게 o1, o2로 선택되는지는 정렬 로직의 내부 구현에 따라 다르며, 개발자가 직접 제어할 부분은 아닙니다.
이와 유사한 상황을 다루는 기존의 답변을 참고하면 도움이 될 수 있지만, 정확하게 질문에 맞는 답변을 찾기 어려운 경우가 많습니다. 때문에 제공된 기존 답변은 다음과 같습니다:
- 정렬 알고리즘의 선택과 Arrays.sort 기능: 정렬-1 강의에 대한 질문이 있습니다.에서 Arrays.sort 사용 시 정렬 알고리즘과 o1, o2 비교에 대한 이해를 돕는 답변을 찾을 수 있습니다.
그러나 해당 질문이 Arrays.sort 메소드의 전반적인 내용을 다루고는 있으나, 핵심적으로 삽입 정렬의 사용 여부와 비교 기준에 대한 직접적인 해설은 부족할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
제네릭 타입 매개변수 제한과 관련한 문의입니다.
0
80
3
강의가 좀 버겁다 느껴질 때 학습방법 문의
1
135
4
제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T
0
61
1
new T()가 안 되는 니유
0
102
1
안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.
0
98
2
자바 로드맵 선택 질문
0
111
2
실전 자바 중급 - 2편 후 추천 강의
0
176
2
실프로젝트에서 Java25버전 사용
0
121
1
Arrays.sort
0
68
1
블로그 작성 시, 저작권 문제에 대하여
0
166
1
중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.
0
94
3
pop()과 poll()의 차이
0
94
1
특정 index의 노드 조회하기 질문
0
66
2
List.of() 비어있는 불변 리스트 생성
0
81
2
문제2: 개 타입 반환
0
55
2
[리뷰] 중급2편까지 겨우 완강 했습니다.
0
113
2
문제와 풀이1 Ex2와 Ex3
0
65
2
노드 삭제시 노드 null값으로 초기화
0
77
2
강의영상에 대한 질문
0
57
1
타입 매개변수 제한
0
59
1
compareTo
0
68
1
직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다
0
98
3
섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨
0
70
2
퀴즈 오류 관련 문의
0
109
1





