적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/참고

[Swift] 정렬 sort / sorted 차이점

hongssup_ 2022. 12. 31. 10:03
반응형

Swift에서의 정렬 메서드 sort() 와 sorted() 의 차이에 대해 알아 보았다. 

둘 다 시간복잡도는 O(n log n)으로 동일하지만, 사용법이 다르다.  

 

sort

Sorts the collection in place

sort() 는 배열을 제자리에서 변경하며 값을 정렬하기 때문에 원본 배열의 값이 바뀐다. 

값 자체가 변경이 되는 메서드이기 때문에, 정렬하고자 하는 컬렉션은 mutable 이어야 한다.

mutating func sort()
var arr = [7,2,16,1]
arr.sort()
print(arr) // [1,2,7,16]
arr.sort(by: >) 
print(arr) // [16,7,2,1]

sorted

Returns the elements of the sequence, sorted.

sorted() 는 배열의 값들을 정렬한 사본을 리턴한다. 원본은 그대로.

func sorted() -> [Element]
let arr = [7,2,16,1]
let sortedArr = arr.sorted()
print(sortedArr) // [1,2,7,16]
let sortedArrReverse = arr.sorted(by: >) 
print(sortedArrReverse) // [16,7,2,1]

 

둘 다 시간복잡도는 O(n logn)

sort는 원본 배열 자체를 변경하여 값들이 정렬되고,

sorted는 정렬된 배열의 사본을 리턴한다. 

 

sort는 배열 순서 자체를 변경하기 때문에, 원본 배열의 보존이 필요할 경우 sorted를 사용하는 것이 좋다. 

반면 sorted는 각 값을 복제하고 메모리 사용량을 두 배로 늘린다. 따라서 사이즈가 큰 배열에 sorted를 하면 메모리 사용량이 늘어나게 되고, 이미 정렬된 배열에 sorted를 하게 되면 쓸데없이 값을 복제하기 때문에 메모리가 불필요하게 사용될 수도 있다.

 

 

배열의 원래 순서가 중요한 경우, sorted() 를 사용하고

메모리 절약을 하고 싶다면 sort()를 사용하는 것이 좋다. 

 


참고 : 

https://hyerios.tistory.com/71

728x90
반응형

'Algorithm > 참고' 카테고리의 다른 글

Swift 코드 실행 시간 측정 방법 (최신 방법..!)  (1) 2023.05.06
modulo 10^9 + 7 이란? + 쓰는 이유?  (0) 2022.11.13
사소한 궁금증들  (0) 2022.11.13
Swift 반복문  (0) 2022.10.29
코테공부 시행착오  (0) 2022.10.27