[Javascript] sort() 함수 정리(오름차순, 내림차순)

우지끈·2024년 11월 19일


sort() 함수를 어떻게 사용하는지는 어느정도 알고 있으나
sort(a, b) => a-b , sort(a, b) => a > b ? 1 : -1 같은 방법으로 사용할 때 작동 원리가 매번 가물가물해서 내가 보기 위해 기록해두려 한다!


기본적인 sort()의 작동 원리

sort() 메서드는 배열의 요소를 정렬할 때, 각 요소 쌍을 비교하여 정렬 순서를 결정한다.

비교 함수의 반환 값에 따른 정렬 규칙

  • 음수(-1): ab보다 앞에 와야 함
  • 양수(1): ba보다 앞에 와야 함
  • 0: ab의 순서 변경 X

(a, b) => a > b ? -1 : 1 (내림차순)

보통 문자열 정렬할 때 많이 사용
(오름차순은 -1, 1 위치만 바꿔주면 된다.)

  1. a > b가 참이면 -1 반환: ab보다 앞에 와야 함
  2. a > b가 거짓이면 1 반환: ba보다 앞에 와야 함

예제

const arr = ["h", "e", "l", "l", "o"];

비교 과정

첫 번째 비교 반복

  1. 비교 쌍: 첫 번째 요소( a = "h", b = "e" )
    • 조건: a > b \to "h" > "e" \to
    • 반환: -1 \to "h""e" 앞에 둠
    • 결과: ["h", "e", "l", "l", "o"]
  2. 비교 쌍: 두 번째 요소( a = "e", b = "l" )
    • 조건: a > b \to "e" > "l" \to 거짓
    • 반환: 1 \to "l""e" 앞에 둠
    • 결과: ["h", "l", "e", "l", "o"]
  3. 비교 쌍: 세 번째 요소( a = "e", b = "l" )
    • 조건: a > b \to "e" > "l" \to 거짓
    • 반환: 1 \to "l""e" 앞에 둠
    • 결과: ["h", "l", "l", "e", "o"]
  4. 비교 쌍: 네 번째 요소( a = "e", b = "o" )
    • 조건: a > b \to "e" > "o" \to 거짓
    • 반환: 1 -> "o""e" 앞에 둠
    • 결과: ["h", "l", "l", "o", "e"]

두 번째 비교 반복

  1. 비교 쌍: 첫 번째 요소( a = "h", b = "l" )
    • 조건: a > b \to "h" > "l" \to 거짓
    • 반환: 1 \to "l""h" 앞에 둠
    • 결과: ["l", "h", "l", "o", "e"]

이런식으로 완전히 정렬이 될 때까지 반복한다.

정렬 결과

["o", "l", "l", "h", "e"]

(a, b) => a - b (오름차순)

주로 숫자 배열을 정렬할 때 사용
(내림차순은 b-a로 바꿔주면 된다.)

  1. 음수(a - b < 0): ab보다 앞에 배치
  2. 양수(a - b > 0): ba보다 앞에 배치
  3. 0(a - b === 0): 순서 유지

예제

const arr = [3, 1, 4, 1, 5, 9];

첫 번째 비교 반복

  1. 비교 쌍: 첫 번째 요소 (a = 3, b = 1)
    • 계산: a - b \to 3 - 1 \to 2(양수)
    • 결과: b가 앞에 배치 \to [1, 3, 4, 1, 5, 9]
  2. 비교 쌍: 두 번째 요소 (a = 3, b = 4)
    • 계산: a - b \to 3 - 4 \to -1 (음수)
    • 결과: a가 앞에 배치 \to [1, 3, 4, 1, 5, 9] (변화 없음)
  3. 비교 쌍: 세 번째 요소 (a = 4, b = 1)
    • 계산: a - b \to 4 - 1 \to 3 (양수)
    • 결과: b가 앞에 배치 \to [1, 3, 1, 5, 5, 9]
  4. 비교 쌍: 네 번째 요소 (a = 5, b = 9)
    • 계산: a - b \to 5 - 9 \to -4 (음수)
    • 결과: a가 앞에 배치 \to [1, 3, 1, 4, 5, 9] (변화 없음)

두 번째 비교 반복 시작
...
정렬이 끝날 때까지 반복

정렬 결과

[1, 1, 3, 4, 5, 9]

따라서 sort()는 비교 함수를 기반으로 정렬 방향을 결정하며,
내부적으로 구현된 정렬 알고리즘에 따라 다를 수 있지만, 일반적으로 비교 \to 교환 \to 반복 으로 작동한다는 걸 알 수 있다.

0개의 댓글