본문 바로가기

Java & JSP

[Java] Arrays.sort()와 Collections.sort()의 시간복잡도 비교

728x90
반응형

알고리즘을 풀다가 흔하디 흔한 sort() 정렬의 차이가 궁금해졌다.

 

보편적으로 배열을 정렬할 땐 Arrays.sort(), 컬렉션(List,Set..)을 정렬할 땐 Collections.sort()를 사용한다.

찾아보니 같은 sort 메서드지만 내부에서는 다른 정렬방식을 사용하여 정렬한다고 한다. 이에 따라 시간복잡도도 달라 각 자료구조를 사용할 때 효율성 테스트의 성공/실패 결과가 달라질 수 있다. 이에 대한 내용을 간단히 정리해보자.

 


 

  정렬 방식 시간 복잡도
Arrays.sort() DualPivotQuicksort 평균 : O(nlog(n)) / 최악 : O(n^2)
Collections.sort() TimeSort (삽입정렬과 합병정렬을 결합한 정렬) 평균, 최악 : O(nlog(n))

 

따라서 최악이 O(nlog(n))의 시간복잡도를 갖고 있는 Collections의 sort()이 더 빠르며 평균 정렬 알고리즘으로 채택하여 사용하고 있다고 한다.
(특별한 제약이 없다면 무조건 Collections.sort()을 사용하기 보단 상황에 맞는 것을 사용하면 될 것 같다.)

 

 

참고

https://laugh4mile.tistory.com/175

 

[JAVA] 정렬에 대한 고찰 (Arrays.sort() 와 Collections.sort())

최근 백준 - 수 정렬하기 2 라는 문제를 풀다가 이상한 상황을 겪었다. Link : https://www.acmicpc.net/problem/2751 아니 배열에 담아 Arrays.sort() 해서 출력하면 시간초과가 나고 ArrayList에 담아 Collecti..

laugh4mile.tistory.com

 

728x90
반응형