선택정렬 : Selection Sort

frenchkebab·2021년 8월 26일
post-thumbnail


내 풀이

function solution(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) [arr[i], arr[j]] = [arr[j], arr[i]];
    }
  }
  answer = arr;
  return answer;
}

let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));
  • Solution을 보니 굳이 arr[i]보다 작은 값을 계속 swap할 필요가 없을 것 같다.
    -> 그냥 최소 idx로 찍어놓고 마지막에 swap하면 훨씬 연산이 줄어들 듯
  • 굳이 마지막 줄에 let answer = arr 선언하는 것보다
    첫 줄에 let answer == arr 로 미리 선언했으면 좀 더 깔끔했을 것 같다
    (★★★answer = arr 을 해 주면 값 복사만 일어나는 것이 아니라,
    arr메모리 공간answer참조하게 된다!!)

내 풀이 수정

function solution(arr) {
  let answer = arr;
  for (let i = 0; i < arr.length - 1; i++) {
    let idx = i;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[idx] > arr[j]) idx = j;
    }
    [arr[i], arr[idx]] = [arr[idx], arr[i]];
  }
  return answer;
}

let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));

Solution 풀이

function solution(arr) {
  let answer = arr;
  for (let i = 0; i < arr.length; i++) {
    let idx = i;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[idx]) idx = j;
    }
    [arr[i], arr[idx]] = [arr[idx], arr[i]];
  }
  return answer;
}

let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));

사실상 별 의미 없는 차이겠지만,
굳이 iarr 의 마지막 index까지 돌 필요는 없다
arr[arr.length - 2] 까지만 돌면 된다
(마지막 원소는 이미 가장 큰 원소이기 때문)

profile
Blockchain Dev Journey

0개의 댓글