코딩기록

JS) 오름차순, 내림차순 (배열 값 정렬 ) 본문

프론트/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를 할 수도 있음.
    • 최적화를 위해 비교 순서를 상황에 따라 동적으로 결정함.

 

 

 

 

 

 

 

 

 

 

반응형
Comments