-
Section3 Daily Coding 16_insertionSort공부/데일리코딩 2022. 7. 14. 10:04반응형
insertionSort
문제
정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다.
입력
인자 1 : arr
- number 타입을 요소로 갖는 배열
- arr[i]는 정수
- arr.length는 1,000 이하
출력
- number 타입을 요소로 갖는 배열을 리턴해야 합니다.
- 배열의 요소는 오름차순으로 정렬되어야 합니다.
- arr[i] <= arr[j] (i < j)
주의사항
- 삽입 정렬을 구현해야 합니다.
- arr.sort 사용은 금지됩니다.
- 입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다.
입출력 예시
let output = insertionSort([3, 1, 21]); console.log(output); // --> [1, 3, 21]
Advanced
- insertionSort 함수의 두 번째 인자로 callback 함수를 받아서, 그 함수의 리턴값을 기준으로 요소들을 정렬해 보세요.
Reference Code
// naive solution // const insertionSort = function (arr) { // let sorted = [arr[0]]; // for (let i = 1; i < arr.length; i++) { // if (arr[i] >= sorted[i - 1]) { // sorted.push(arr[i]); // } else { // for (let j = 0; j < i; j++) { // if (arr[i] <= sorted[j]) { // const left = sorted.slice(0, j); // const right = sorted.slice(j); // sorted = left.concat(arr[i], right); // break; // } // } // } // } // return sorted; // }; const insertionSort = function (arr, transform = (item) => item) { let sorted = [arr[0]]; for (let i = 1; i < arr.length; i++) { if (transform(arr[i]) >= transform(sorted[i - 1])) { sorted.push(arr[i]); } else { for (let j = 0; j < i; j++) { if (transform(arr[i]) <= transform(sorted[j])) { const left = sorted.slice(0, j); const right = sorted.slice(j); sorted = left.concat(arr[i], right); break; } } } } return sorted; };
내가 쓴 코드
const insertionSort = function (arr,transform=(item)=>item) { // TODO: 여기에 코드를 작성합니다. for(let i=1;i<arr.length;i++){ let key = arr[i] let j = i-1//1-0=0 //앞의 값을 보도록 설정 while(j>=0 && transform(arr[j])>transform(key)){ //나의 앞에 값이 현재 값보다 클 경우 while문 돌기 arr[j+1] = arr[j]//0+1=1 //나의 뒷 값 위치에 나를 넣어주고 j=j-1//0-1=-1 //j값을 줄여줘서 앞의 값에 접근할 수 있도록 하고 } arr[j+1]=key //작았던 앞의 값을 나의 앞에 넣어주도록 } return arr };
반응형'공부 > 데일리코딩' 카테고리의 다른 글
Section3 Daily Coding 18_mergeSort (1) 2022.07.18 Section3 Daily Coding 17_quickSort (1) 2022.07.15 Section3 Daily Coding 15_powerSet (2) 2022.07.13 Section3 Daily Coding 14_binarySearch (0) 2022.07.12 Section3 Daily Coding 13_orderOfPresentation (0) 2022.07.11