Immersive Toy Problem 16

워뇽쿤·2022년 9월 26일
post-thumbnail

문제 : quickSort

정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다.

입력

인자 1 : arr

  • number 타입을 요소로 갖는 배열
  • arr[i]는 정수
  • arr.length는 100,000 이하

출력

  • number 타입을 요소로 갖는 배열을 리턴해야 합니다.
  • 배열의 요소는 오름차순으로 정렬되어야 합니다.
  • arr[i] <= arr[j] (i < j)

주의사항

  • 퀵 정렬을 구현해야 합니다.
  • arr.sort 사용은 금지됩니다.
  • 입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다.

입출력 예시

let output = quickSort([3, 1, 21]);
console.log(output); // --> [1, 3, 21]

풀이

function quickSort(arr, transform = (item) => item) {
  if (arr.length <= 1) return arr;

  const pivot = arr[0];
  const left = [];
  const right = [];

  for (let i = 1; i < arr.length; i++) {
    if (transform(arr[i]) < transform(pivot)) left.push(arr[i]);
    else right.push(arr[i]);
  }

  const lSorted = quickSort(left, transform);
  const rSorted = quickSort(right, transform);
  return [...lSorted, pivot, ...rSorted];
}

느낀점

퀵정렬은 기준점(피봇)을 잡고 왼쪽은 작은수 오른쪽은 큰수를 위치해주면서 정렬하는 정렬함수이다.
아직 알고리즘을 코딩으로 표현하기에는 많이 어려움이 있는거 같다.. 알고리즘 동작 방식만이라도 이해하고 넘어가도록 노력해야겠다.

profile
QA 성장기

0개의 댓글