2023년 11월 09일

@VERO
Created Date · 2023년 11월 09일 01:11
Last Updated Date · 2023년 11월 09일 05:11

not done 
due this week
short mode

TODO

LOG

배운 것

  • stream().sorted() 는 스트림을 소비하지 않고 단순히 파이프라인에 연산을 추가하기 때문에 그 자체로 O(1)O(1) 이다.
    • SortedSet 같은 자료구조 라면 아무 작업도 수행하지 않는다. -> O(1)O(1)
    • stream 이 병렬이 아니라면 Arrays.sort() 에 위임한다. -> O(NlogN)O(NlogN)
    • stream 이 병렬이면 Arrays.parallelSort() 에 위임한다. -> O(NlogN)O(NlogN)
  • Quick Sort 는 불안정정렬이지만, primitive 타입의 경우 안정 / 불안정이 상관이 없다. -> Arrays.sort(primivite type array) 인 경우에는 Dual Pivot QuickSort 가 사용된다.
  • Collections.sort() 는 Timsort 를 사용하기 때문에 안정 정렬이다. 즉, 안정 정렬이 필요한 객체 배열 같은 경우 사용하면 좋다.
  • Quick sort 는 메모리를 덜 사용하지만, Timsort 처럼 배열에서 이미 정렬된 데이터의 실행을 활용할 수 없다.
  • primitive array 는 특정 상황에서만 Quicksort 를 사용한다. 더 큰 배열의 경우, Timsort 처럼 미리 정렬된 데이터의 실행을 먼저 식별하고, 실행 횟수가 특정 임계값을 초과하지 않으면 MergeSort 를 시도한다. 배열의 크기가 작은 경우, 삽입 정렬로 돌아가는 구현을 사용한다.

느낀 것