ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Section3 Daily Coding 17_quickSort
    공부/데일리코딩 2022. 7. 15. 09:36
    반응형

    문제

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

    입력

    인자 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]

    Advanced

    • quickSort 함수의 두 번째 인자로 callback 함수를 받아서, 그 함수의 리턴값을 기준으로 요소들을 정렬해 보세요.

    Reference Code

    // naive solution
    // const quickSort = function (arr) {
    //   if (arr.length <= 1) return arr;
    
    //   const pivot = arr[0];
    //   const left = [];
    //   const right = [];
    
    //   for (let i = 1; i < arr.length; i++) {
    //     if (arr[i] <= pivot) left.push(arr[i]);
    //     else right.push(arr[i]);
    //   }
    
    //   const lSorted = quickSort(left);
    //   const rSorted = quickSort(right);
    //   return [...lSorted, pivot, ...rSorted];
    // };
    
    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];
    }
    반응형
Designed by Tistory.