프론트/JavaScript
JS) 오름차순, 내림차순 (배열 값 정렬 )
뽀짝코딩
2024. 2. 19. 18:12
728x90
배열값을 오름차순과 내림차순으로 정렬
오름차순
방법1.
\Math.min / Math.max로 시작점과 끝점을 지정
function answer(x, y) {
let result = [];
// 시작점과 끝점 설정
const start = Math.min(x, y);
const end = Math.max(x, y);
// 단일 for문으로 처리
for (let i = start; i <= end; i++) {
result.push(i);
}
return result;
}
let input = [
// TC: 1
[3, 7],
// TC: 2
[8, 3],
// TC: 3
[12, 10],
];
for (let i = 0; i < input.length; i++) {
process.stdout.write(`#${i + 1} `);
console.log(answer(input[i][0], input[i][1]));
}
//print
#1 [3, 4, 5, 6, 7]
#2 [3, 4, 5, 6, 7, 8]
#3 [10, 11, 12]
방법2.
비교연산자 ( >, < ) 로 x는 항상 작은 값, y는 항상 큰 값
만약 x가 y보다 크다면, 두 값을 서로 바꿈.
function answer(x, y) {
let result = [];
// x를 항상 작게 만듦
if (x > y) {
let t = x;
x = y;
y = t;
}
// 작은 값부터 큰 값까지 반복
for (let i = x; i <= y; i++) {
result.push(i);
}
return result;
}
let input = [
[3, 7], // [3, 4, 5, 6, 7]
[8, 3], // [3, 4, 5, 6, 7, 8]
[12, 10], // [10, 11, 12]
];
for (let i = 0; i < input.length; i++) {
console.log(`#${i + 1} ${answer(input[i][0], input[i][1])}`);
}
//print
#1 [3, 4, 5, 6, 7]
#2 [3, 4, 5, 6, 7, 8]
#3 [10, 11, 12]
방법 3.
sort(a, b)
sort()는 기본적으로 배열 요소를 문자열로 변환한 후 유니코드 순서에 따라 정렬.
중요한건
const cards = [5, 1, 4, 2, 3];
// 오름차순
const ascendingOrder = cards.sort((a, b) => a - b);
console.log('ascendingOrder: ', ascendingOrder);
// 내림차순
const descendingOrder = cards.sort((a, b) => b - a);
console.log('descendingOrder: ', descendingOrder);
// print
ascendingOrder: [
1, 2, 3, 4, 5
]
descendingOrder: [
5, 4, 3, 2, 1
]
흐름 순서
let n = [5, 1, 4, 2, 3];
n.sort((a, b) => b - a);
// 내부적으로 sort는 아래와 같은 비교를 반복 수행:
1. 비교: (5, 1) => 1 - 5 = -4 → 1이 5보다 뒤로 감.
2. 비교: (4, 5) => 5 - 4 = 1 → 4가 5보다 뒤로 감.
3. 비교: (2, 3) => 3 - 2 = 1 → 2가 3보다 뒤로 감.
...
// 최종 배열: [5, 4, 3, 2, 1]
sort 동작 방법
- 콜백 함수 (a, b) => b - a에서 a = 5, b = 1.
- 계산: 5 - 1 = -4.
- 결과가 음수이므로, a가 b보다 앞에 있어야 함.
- 정렬 결과: [5, 1 ...].
- 중요한 점은 '비교 순서는 고정되지 않는다' 는 것.
- 배열안 5-4, 5-2, 5-3 을 다 하고 1-4 를 할수 도 있고
- 두번째로 [5,1,4 ..] 배열에서 1-4를 할 수도 있음.
- 최적화를 위해 비교 순서를 상황에 따라 동적으로 결정함.
반응형