티스토리 뷰
자바에서 제공하는 api를 활용하여
정렬을 하고 싶다면
Collections, Arrays 클래스의 sort를
사용하면 됩니다.
우선 정렬 기준을 만들어 봅시다.
Collections.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.value() - o2.value();
}
});
첫 번째 인자는 정렬할 대상이고, 두 번째 인자는 정렬 기준(비교)입니다.
두 번째 인자에 익명 클래스를 작성하여 줍니다.
o1, o2는
dest [j-1],
배열 내의 연속된 요소들입니다.
이 요소들로
loop(조건 c.compare(dest [j-1],
실행 swap(dest, j, j-1);
}
내부에서 이런 코드 기준으로 정렬이 됩니다.
(mergeSort가 사용될 시)
익명 클래스 구현 로직에 따라
dest [j-1] dest[jdest [j] 이
양수면 실행
0이면 실행 x,
음수면 실행 x가 됩니다.
고로 j-1이 더 큰 수면 swap이 실행돼서
j의 값과 swap이 돼서 결국 오름차순으로 정렬이 됩니다.
내림차순으로 하고 싶으면
o1 - o2를 o2 - o1으로 바꾸면 됩니다.
그러면 o2가 더 값이 클 때 swap이 일어나게 됩니다.
아래는 함수를 타고 들어가 봤습니다.
@SuppressWarnings({"unchecked", "rawtypes"})
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
위에 Collections.sort에 가보니
파라미터로 List <T>와 Comparator <? super T>가 필요합니다.
가지고 온 list의 sort함수에 Comparator를 넣어 실행시킵니다.
@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
toArray()로 Collection객체를
배열에 옮긴 후
Arrays.sort로 Comparator와 배열을 함께 가져갑니다.
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
정렬 기준(=Comparator)을 안 넣었다면
처음 조건문에서 바로 sort(c)로 이동해서
기본 정렬 기준을 사용해서 정렬이 될 것이고
정렬 기준이 존재한다면
MergeSort나 Timsort를 사용해서
정렬이 됩니다.
..
타고 올라가서
for (int i=low; i<high; i++)
for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
swap(dest, j, j-1);
return;
MergeSort 선택 시
위와 같이 for문의
c.compare(dest [j-1], dest [j]) > 0; 에서 비교가 사용이 됩니다.
다른 분 기점으로 TimSort가 사용될 수도 있는데
오늘은 대략적인 사용방법만 공부하는 시간이라
TimSort는 다음에 하겠습니다.
'Java & Kotlin' 카테고리의 다른 글
spring mybatis 사용해보기, 사용법 (0) | 2021.07.22 |
---|---|
REST API (0) | 2021.07.22 |
테스트코드 작성후 느낀점 (0) | 2021.07.11 |
postgresql 설정, springBoot (0) | 2021.07.11 |
springBoot error (0) | 2021.07.09 |
- Total
- Today
- Yesterday
- 관계설정
- Spring
- 문제
- jre
- 알고리즘
- 프로그래머
- 백준
- 스택
- 스타트업
- jre8
- 다대일
- springboot
- jvm
- 코딩테스트
- 개발자채용
- jre11
- jdk11
- 자사서비스
- 백엔드
- JPA
- JDK
- ㅃ
- java8
- 백준 제로 자바
- 백준 제로
- boot 일대다
- 자바
- JDK8
- boot
- mappedby
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |