sort()함수의 인자로 들어가는 비교함수 로직에 대해 질문입니다.

#자바스크립트 #Sort함수

자바스크립트 sort()함수 안에
배열 규칙을 정하는 compare로직에 대해 질문합니다.

오름차순일 경우,
return a-b 로 쓰고,
내림차순일 경우
return b-a 하는 이유가 궁금합니다.

f(a,b)가 리턴하는 값이
음수 일 경우, 양수일 경우, 0일 경우에 따라
배열안에 a,b의 인덱스 값이 변경되어
오름,내림차순으로 요소의 인덱스가
변경되는 것으로 알고 있습니다.

더불어 객체[문자]배열을 정렬하는 것도
“>”,"<" 에 따라서 값이 달라 지는데 어떤 원리인가요,

오름: a-b
내림: b-a 처럼 공식으로 암기 해야될까요,

스택오프플로우 찾아봤는데, 읽어봐도 이해가 될듯말듯 아직도 갸우뚱 합니다.
궁금한 분들을 위해 링크 공유합니다.

정렬함수 구현안에서 쓰이는 비교함수가 위 함수로 대체 되는 겁니다.

간단한 예로 선택정렬 알고리즘을 구현한 함수가 있다고 합시다.

function selectionSort(a, cmp) {
  for (let i = 0; i < a.length; i++) {
    let m = i;
    for (let j = i + 1; j < a.length; j++) {
      if (cmp(a[m], a[j]) > 0) {
          m = j;
      }
    }
    let t = a[i];
    a[i] = a[j];
    a[j] = t;
  }
  return a;
}

그리고 compare 함수가 저런 형식을 취할 때 좋은 점은 compare 함수 호출 한번과
비교 연산자를 일대일 대응 시킬 수 있다는 겁니다.

a == b;   cmp(a, b) == 0
a != b;   cmp(a, b) != 0
a <  b;   cmp(a, b) <  0
a >  b;   cmp(a, b) >  0
a <= b;   cmp(a, b) <= 0
a >= b;   cmp(a, b) >= 0
2개의 좋아요