just do it

sort 함수 이해하기(오름차순, 내림차순 함수 만들기) 본문

언어&프레임워크/JavaScript

sort 함수 이해하기(오름차순, 내림차순 함수 만들기)

밍풀 2023. 4. 28. 16:46

코딩테스트 기본 문제 복습하다가 내림차순 함수를 정의할때

array.sort((a,b)=>b-a);

와 같이 sort 함수를 사용해왔는데 왜 b-a인지 제대로 이해하진 못하고 있는 것같아 추가로 학습함 

 

sort 함수는 유니코드 정렬을 기본으로 하므로 숫자의 내림차순, 오름차순을 위해서는 

compareFunction 을 사용해야 함

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

 

Array.prototype.sort() - JavaScript | MDN

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

developer.mozilla.org

compareFunction 에 대한 설명은 아래 와 같음 

 

compareFunction이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬됩니다. a와 b가 비교되는 두 요소라면,

  • compareFunction(a, b)이 0보다 작은 경우 a를 b보다 낮은 색인으로 정렬합니다. 즉, a가 먼저옵니다.
  • compareFunction(a, b)이 0을 반환하면 a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬합니다. 참고 : ECMAscript 표준은 이러한 동작을 보장하지 않으므로 모든 브라우저(예 : Mozilla 버전은 적어도 2003 년 이후 버전 임)가 이를 존중하지는 않습니다.
  • compareFunction(a, b)이 0보다 큰 경우, b를 a보다 낮은 인덱스로 소트합니다.
  • compareFunction(a, b)은 요소 a와 b의 특정 쌍이 두 개의 인수로 주어질 때 항상 동일한 값을 반환해야합니다. 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않습니다.

 

즉 array.sort((compareFunction(a, b)) 에서 

compareFunction(a, b) < 0 이면 a를 앞으로 정렬

compareFunction(a, b) = 0 이면 변함 없음

compareFunction(a, b) > 0 이면 b를 앞으로 정렬 이란 뜻 

 

여러 이해방법이 있겠지만 하나를 기록해보자면 

 

숫자 오름차순 정렬을 원할 경우 

x < y 이면 x를 앞으로 정렬 하는 것과 같음

 ; x - y < 0 이면 x를 앞으로 정렬하는 것

 

위의 compareFunction(a, b) < 0 이면 a를 앞으로 정렬 이란 설명에서 

a가 x , b가 y 를 의미하는거고

compareFunction(a, b) 이 a-b 가 됨

 

따라 오름차순 정렬 하는 함수는 아래와 같이 작성하게됨

1
2
3
4
5
6
7
8
function descendingOrder(arr) {
  arr.sort(function(a, b) {
    return b - a;
  });
  return arr;
}
 
 
cs

더 쉽게 이해하자면 

(함수return 값)<0 이면 a를 앞으로 니깐

내림차순 원하니까

큰게(a) 앞으로 와야하니  a>b 니깐

(함수return 값)<0 

 b-a<0