Algorithm

Insertion Sort (삽입 정렬)

주인장 꼬비 2022. 8. 7. 16:16

Insertion Sort란

앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 배열을 정렬한다.

 

 

function swap(arr, idx1, idx2) {
  let temp = arr[idx1];
  arr[idx1] = arr[idx2];
  arr[idx2] = temp;
}

// insertionSort가 아니라 이상하게 bubble sort처럼? 해버림
// function insertionSort(arr) {
//   for (let i = 1; i < arr.length; i++) {
//     for (let j = i; j > 0; j--) {
//       if (arr[j] < arr[j - 1]) {
//         swap(arr, j, j - 1);
//       }
//     }
//   }
//   return arr;
// }

function udemyInsertionSort(arr) {
  for (var i = 1; i < arr.length; i++) {
    let currValue = arr[i];
    for (var j = i - 1; j >= 0 && arr[j] > currValue; j--) {
      arr[j + 1] = arr[j];
    }
    arr[j + 1] = currValue;
  }
  return arr;
}
// console.log(insertionSort([3, 44, 38, 5, 47]));
console.log(udemyInsertionSort([3, 44, 38, 5, 47]));

 

 

Insertion Sort의 Big O

데이터가 거의 정렬된 경우 사용하면 좋다.

반대로 데이터가 내림차순으로 정렬되어 있는 경우 오름차순으로 정렬하고자 할 때 성능이 제일 안좋다. 

온라인 알고리즘 (데이터가 들어오는 대로 작동하는 알고리즘) 일 경우 

-> 새로운 데이터를 수신하므로 전체 배열을 한번에 정렬할 필요가 없어 이때는 삽입정렬을 사용하는 것이 유리하다.

'Algorithm' 카테고리의 다른 글

Merge Sort (합병 정렬)  (0) 2022.08.07
Bubble Sort & Insertion Sort & Selection Sort 비교  (0) 2022.08.07
정렬 알고리즘 소개  (0) 2022.08.06
Naive String Search  (0) 2022.07.31
Binary Search  (0) 2022.07.31