숫자(Number) 배열을 인수로 받는 JavaScript 함수를 작성해야 합니다.
이 함수는 해당 배열을 제자리(in-place)에서 정렬해야 하며, 오름차순 또는 내림차순 중 원하는 방식으로 정렬할 수 있습니다.
기본 sort()만으로는 부족한 이유
JavaScript의 sort() 메서드는 별도의 비교 함수를 전달하지 않으면 모든 요소를 문자열로 변환한 뒤 사전식(lexicographic) 순서로 정렬합니다. 그래서 [1, 5, 10, 25, 40]을 기본 sort()로 정렬하면 [1, 10, 25, 40, 5]처럼 엉뚱한 결과가 나옵니다. 숫자를 올바르게 정렬하려면 반드시 비교 함수(compare function)를 직접 작성해 전달해야 합니다.
예제
구현 코드는 다음과 같습니다 −
const arr = [2, 5, 19, 2, 43, 32, 2, 34, 67, 88, 4, 7];
const sortIntegers = (arr = []) => {
const sorterAscending = (a, b) => {
return a - b;
};
const sorterDescending = (a, b) => {
return b - a;
};
arr.sort(sorterAscending);
};
sortIntegers(arr);
console.log(arr);비교 함수의 동작 원리
비교 함수는 두 개의 인수 a와 b를 받으며, 반환값에 따라 정렬 순서가 결정됩니다. 음수를 반환하면 a가 b보다 앞에 배치되고, 양수를 반환하면 b가 a보다 앞에 배치됩니다. 따라서 a - b는 오름차순, b - a는 내림차순 정렬을 수행합니다. 위 예제에서 arr.sort(sorterDescending)으로 바꿔 호출하면 같은 배열을 내림차순으로 정렬할 수 있습니다. 참고로 sort()는 원본 배열 자체를 변경하며, 변경된 배열의 참조를 반환합니다.
출력
콘솔에 출력되는 결과는 다음과 같습니다 −
[ 2, 2, 2, 4, 5, 7, 19, 32, 34, 43, 67, 88 ]