TIL - sort함수

jake·2021년 12월 9일
0

TIL

목록 보기
17/54
post-thumbnail

요즘 코딩 테스트 준비로 알고리즘을 문제를 풀고 있습니다.
문제를 풀면서 사용한 메서드들을 제대로 이해하지 않고 문제를 풀고 있다고 느껴져 제대로 이해하고 사용하기 위해 이 글을 작성 하였습니다.

sort란?

  • 배열의 요소를 정렬하는데 사용하는 함수
arr.sort([compareFunction])
  • 대괄호([])는 괄호() 안의 매개변수가 필수가 아니라 상황에 따라 생략이 가능하다는 말입니다.

  • compareFunction은 요소의 순서를 결정하는 데 사용되는 함수로
    첫번째 값이 두번째 값보다 작을경우 음수값 반환
    같을경우는 0 반환,
    그렇지 않을 경우는 양수 값을 반환됩니다.
    생략할 경우 ASC||문자 기준으로 오름차순으로 정렬됩니다.

  • 파라미터가 생략되어 ASC||문자 기준으로 정렬되면 10이 3보다 앞에있는 것을 알 수 있습니다.
    그 이유는 ASC||문자 기준으로 정렬할 때 일시적으로 숫자타입 -> 문자열 타입으로 형변환하기 때문입니다.
    그리고 형 변환 이후에는 해당문자의 첫번째 문자를 기준으로 비교하기 때문에 "10" =1의 아스키 코드 값을가져 "3"보다 작은 아스키 코드 값을 가질 수 있게 된다.


그럼 제대로 정렬하게 하려면 어떻게 해야될까 ?

.sort() 안에 compareFunction파라미터를 선언해주면 됩니다.
.sort() 함수는 compareFunction에 선언된 함수에게 배열의 요소 2개씩 반복해서 보낸 뒤, compareFunction이 반환하는 값을 기준으로 정렬합니다.

ex) 요소들의 이름을 a,b라고 한다면 compareFunction의 반환값(return)에 따른 .sort() 함수의 해석은

  • 반환 값 < 0 : a가 b보다 앞에 있어야한다 (음수면 a,b자리 안바꿈)
  • 반환 값 = 0 : a와 b의 순서를 바꾸지 않는다.
  • 반환 값 > 0 : b가 a보다 앞에있어야한다. (양수면 a,b자리 바꿈)

실제로 사용할 때는

  • 오름 차순 코드

  • 내림 차순 코드


sort 함수 응용

  1. Object 정렬

  2. 조건부 정렬


마무리

  • .sort함수의 파라미터인 compare함수 return 값이
  1. 음수이면 a,b의 자리가 안바뀌고
  2. 양수이면 a,b의 자리가 바뀐다
  3. 0이면 그대로있다.
  • .sort함수의 파라미터인 compare함수를 어떻게 작성하는지에 따라 정렬 방법이 다양하다.

참고사이트:
https://change-words.tistory.com/64
https://brunch.co.kr/@swimjiy/12
https://opentutorials.org/course/50/109 (sort함수 동작원리 댓글에 있습니다)

profile
열린 마음의 개발자가 되려합니다

0개의 댓글